2011-09-23 22 views
13

W wielu przypadkach muszę powiązać zachowanie z elementem po wczytaniu, a następnie po wywołaniu zdarzenia (np. "Zmień"). Myślę, że najlepszym rozwiązaniem byłoby, aby go w tej samej linii:Jquery: bind load + change while

$('#element_id').bind('load, change', function() { 
... 
}); 

Ale to działa tylko dla „zmiany”, a nie do „obciążenie”. Jest lepszy sposób?

+0

Usunąłem przecinek, ale i tak to nie działa. Myślę, że będą pewne ograniczenia z obciążeniem – max

Odpowiedz

36

natknąłem się na ten sam problem. Usuwanie przecinek nie wystarcza, przynajmniej nie w tym przypadku:

$(document).ready(function(){ 
    $('#element_id').bind('load change', function() { 
     ... // (this DOESN'T get called on page load) 
    }); 
}); 

Chyba load wydarzenia uzyskać wyzwolone przed $(document).ready().

Jest to proste rozwiązanie:

$(document).ready(function(){ 
    $('#element_id').bind('change', function() { 
     ... 
    }); 
    $('#element_id').trigger('change'); 
}); 
+0

Nawet to zapętli wydarzenie zmiany miliard razy. Nie mam pojęcia dlaczego. Próbowałem tej metody i innych i po prostu wciąż chce się zapętlić. –

+0

Czy wyzwalasz zdarzenie wewnątrz funkcji? Nie powinien się zapętlać, musi gdzieś być błąd. Możesz spróbować zrobić minimalny przypadek błędu i zamieścić kod w osobnym pytaniu; najprawdopodobniej to wymyślisz przed naciśnięciem przycisku "Opublikuj". :) – johndodo

+0

Nie wyzwalanie go wewnątrz funkcji. $ ('# employeeDropDown'). on ('change', function (event) { var form = $ (event.target) .parents ("formularz"); form.submit(); }). 'zmiana'); lub nawet gdy umieścisz go powyżej, spowoduje, że zapętli się. –

1

Nie wystarczy usunąć przecinek?

+0

Aby dodać na: http://api.jquery.com/bind/ –

4

Dla już załadowanej treści, gdy chcesz uruchomić funkcję na imprezie, a także od razu, można użyć niestandardowego zdarzenia własnego nazewnictwa, aby uniknąć wyzwalania wszelkie istniejące wiązania z bibliotek itp. na wbudowanych zdarzeniach, np

$(".my-selector").on("change rightnow", function() { 
    // do stuff... 
}).triggerHandler("rightnow"); 
Powiązane problemy