2012-12-28 8 views
5

W moim kodzie ustawiona jest procedura obsługi zdarzeń dla elementu, która zmienia wysokość css tego elementu na 100px. W innym miejscu chcę uruchomić inną procedurę obsługi zdarzeń, jeśli spełnione są pewne warunki, co powinno zastąpić poprzednią procedurę obsługi zdarzenia i zmienić jej wysokość na 200px.Jak zastąpić wcześniej ustawioną obsługę zdarzeń jquery?

Czy istnieje sposób, aby to zrobić, lub wyczyścić wszystkie wcześniej ustawione funkcje obsługi zdarzeń dla elementu?

+0

Możesz sprawdzić warunki wewnątrz obsługi zdarzenia, nie? –

Odpowiedz

13

Tak, wystarczy użyć .off(), jak

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

Jest to bit hack, ale to brzmi jak starasz się włamać na cudzym kodzie bez możliwości zmiany bezpośrednio abyśmy być tym, do czego musisz się odwoływać.

Jeśli wystarczy zadzwonić coś po ich document.ready() i nie kontrolują kolejność wypowiedzi document.ready(), a następnie można umieścić jakiś kod na krótki czas oczekiwania tak wewnątrz document.ready Handler:

$(document).ready(function() { 
    setTimeout(function() { 
     $('selector').off('eventname').on(your event handler here); 
    }, 1); 
}); 

Po uruchomieniu wszystkich procedur document.ready() uruchomione zostanie setTimeout().

+0

Czy istnieje kod do sprawdzenia, czy jakiekolwiek zdarzenia zostały ustawione dla danego elementu, czy nie. Więc mógłbym zrobić: 'if ($ (ele) .hasHandler ('click'))/* wyczyść zdarzenie/* else setTimeout (this, 1000);', aby upewnić się, że zdarzenie zostało ustawione zanim moja funkcja zostanie wywołana –

+0

@ClickUpvote - nie trzeba najpierw sprawdzać. Po prostu usuń wszystkie wcześniej zastosowane procedury obsługi, a następnie dołącz własne. Jeśli ich nie było, usunięcie niczego nie zmieni. FYI, to TYLKO działa dla procedur obsługi zdarzeń jQuery, a nie zwykłych procedur obsługi stosowanych javascript. – jfriend00

+0

Dobrze, ale jeśli mógłbym sprawdzić przed usunięciem, działałoby to bardziej niezawodnie, np. Sprawdź czy zdarzenie jest ustawione, jeśli tak, usuń i ustaw nowe, jeśli nie, sprawdź ponownie 1 sekundę później, powtórz –