JQuery kullanarak tüm tıklama olay işleyicileri nasıl kaldırılır?


121

Bir sorun yaşıyorum Temel olarak, bir kullanıcı bir sayfadaki 'Düzenle' bağlantısını tıkladığında, aşağıdaki Jquery kodu çalıştırılır:

$("#saveBtn").click(function () {
    saveQuestion(id);
});

Bunu yaparak, kaydet düğmesinin onClick olayı saveQuestion()yöntemi çağırır ve 'Düzenle' bağlantısının tıklandığı sorunun kimliğini iletir.

Ancak aynı oturumda kullanıcı 2 soru üzerinde düzenle'yi tıklarsa, önceki clickolay işleyicisinin üzerine yazmak yerine, 2 olay işleyicisinin çalışmasına neden olur, biri arayabilir saveQuestion(1), diğeri arayabilir saveQuestion(2). Bunu yaparak 1 soru diğerinin üzerine yazılır.

clickBir düğmeye atanmış önceki tüm olayları kaldırmanın bir yolu var mı?

Yanıtlar:


203

Böyle bir olayı kaldırmak için off () kullanırsınız:

$("#saveBtn").off("click");

ancak bu, bu öğeye bağlı tüm tıklama olaylarını kaldıracaktır . SaveQuestion içeren işlev tek olay bağlıysa, yukarıdakiler bunu yapacaktır. Aşağıdakileri yapmazsanız:

$("#saveBtn").off("click").click(function() { saveQuestion(id); });

31
JQuery 1.7'den bu yana, bağlama ve çözme yerine açma ve kapatma kullanmalısınız
Ralph Jansen

@LockTar bunun yerine nasıl yazılması gerektiğini önerebilir misin?
John Magnolia

@JohnMagnolia Yukarıdaki değişikliklerime bakın.
Ralph Jansen

1
.addAttr ( 'Onclick'); veya .removeAttr ('onclick');
Aliti

13

Bir düğmeye atanmış önceki tüm tıklama olaylarını kaldırmanın bir yolu var mı?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)});

unbind()jQuery 3.0 itibariyle kullanımdan kaldırılmıştır ve off()1.7'den beri kullanımı teşvik edilmektedir.
Skylar Ittner

7
$('#saveBtn').off('click').click(function(){saveQuestion(id)});

2

Eğer kullandıysanız ...

$(function(){
    function myFunc() {
        // ... do something ...
    };
    $('#saveBtn').click(myFunc);
});

... daha sonra çözülmesi daha kolay olacak.


1
Nasıl anlarsın Bir öğenin olayının nasıl bağlandığına bakılmaksızın, her zaman aynı şekilde bağlanmamış olabilirler ... $ ('# saveBtn'). Unbind ('olay (lar) ne olursa olsun'); Şimdi, YENİDEN BAĞLAYACAK ... evet, tekniğiniz bazı durumlarda daha kolay olabilir.
KyleFarris

1
Tüm tıklama etkinliklerinin bağlantısını kaldırırsanız, durum farklı değildir. Ancak sadece belirli bir eylemi çözmek isteseydiniz, bu olayı iki yerde yeniden yazmak istemem. Dediğin gibi, eğer onu daha sonra yeniden ifade etmek istersem, bunu yapmak daha kolay çünkü işlevi üçüncü kez yazmak zorunda değilim.
Jarrett Meyer

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.