2012-12-28 23 views
5

Kodumda, öğenin css yüksekliğini 100px olarak değiştiren bir öğe için bir olay işleyicisi ayarlanır. Başka bir yerde, bir önceki olay işleyicisini geçersiz kılacak ve yüksekliğini 200 piksele değiştirecek belirli koşullar karşılandığında farklı bir olay işleyicisinin çalıştırılmasını istiyorum.Önceden ayarlanmış bir jquery olay işleyicisini nasıl geçersiz kılarsınız?

Bunu yapmak için bir yol var mı, yoksa bir öğe için önceden ayarlanmış tüm olay işleyicileri mi siliyorsunuz? Başkasının koduna kesmek için çalışıyoruz gibi o may bunu doğrudan değiştirmek için yeteneği olmadan

+0

Olay işleyicisindeki koşulları kontrol edebilirsiniz, değil mi? –

cevap

13

Evet, sadece bu bir hack bir parçasıdır

$('selector').off('eventname') 
3

gibi .off() kullanın, ancak bu sesler ne için başvurmak zorunda ol.

$(document).ready(function() { 
    setTimeout(function() { 
     $('selector').off('eventname').on(your event handler here); 
    }, 1); 
}); 
: Eğer sadece onların document.ready() sonra bir şeyler aramak gerekiyor ve document.ready() tabloların sırasını kontrol etmezseniz

, o zaman document.ready işleyicisi içinde bunun gibi kısa bir zaman aşımı bazı kod koyabilirsiniz

setTimeout(), tüm document.ready() işleyicilerin çalıştırdığı AFTER uygulamasını çalıştıracaktır.

+0

Verilen eleman için herhangi bir olayın ayarlanıp ayarlanmadığını kontrol etmek için herhangi bir kod var mı? Bu yüzden şunu yapabilirdim: eğer ($ (ele) .hasHandler ('click'))/* clear event/* else setTimeout (bu, 1000); ', olayın işlevimin çağrılmasından önce ayarlandığından emin olmak için –

+0

@ClickUpvote - önce kontrol edilmenize gerek yoktur. Önceden uygulanmış tüm işleyicileri kaldırmanız yeterlidir. Hiçbiri olmasaydı, kaldırmak hiçbir şey yapmaz. FYI, bu YALNIZCA javascript uygulayıcıları değil, jQuery uygulanmış olay işleyicileri için çalışır. – jfriend00

+0

Doğru, ama eğer kaldırmadan önce kontrol edebilirsem, bu daha güvenilir bir şekilde çalışabilir, örneğin olayın ayarlanıp ayarlanmadığını kontrol et, evet ise, kaldır ve yeni ayarla, değilse, tekrar kontrol et 1 saniye sonra tekrar et –

İlgili konular