2012-06-02 2 views
12

Mam stronę powłoki Jquery Mobile, którą ładuję formularz do używania Ajax. Formularz ma kilka pól wyboru, które muszę powiązać.Jak używać Jquery document.on() na elementach, które są wciągane przez Ajax?

dziwne, mogę zmusić go do pracy ustawiania słuchacza bezpośrednio na przycisk tak:

$('input[name="ohneiln"]').on('change', function() { 
    alert("hello"); 
    }); 

Ale gdy próbuję ustawić słuchacza $(document) i przekazywać checkbox, słuchacz nigdy pożary:

$(document).on('change', 'input[name="ohneiln"]', function() { 
    alert("hello"); 
}); 

Pytanie:
Jaki jest prawidłowy sposób ustawić wiążący dla „dynamiczne” elementów będących lo imprezę przyzwyczajeni przez Ajax za pomocą $(document).on()? Czy nie jest to możliwe dla zdarzeń change lub dlaczego mam problemy?

Dzięki za pomoc!

+1

Twój drugi składnia wydaje się dobrze i powinien pracować dla elementów dynamicznych, problem jest gdzieś indziej może. –

+1

działa dobrze http://jsfiddle.net/7rDDA/ – Esailija

+0

@Eailailija - ale twoje wejście jest tam, gdy ładuje się strona. Mój nie jest, jest wciągany przez Ajax po tym, jak użytkownik robi jakieś rzeczy – frequent

Odpowiedz

11

Sposób działania metody .on() zmienia się w zależności od sposobu jej użycia. W pierwszym przykładzie metoda .on() zachowuje się podobnie do metody bind i działa tylko na elementach, które już istnieją.

Drugi przykład zachowuje się jak .live() lub delegate() na wiele sposobów. I będzie działać dla elementów, które zostaną dodane później.

Przeczytaj dokumenty o szczegółowe wyjaśnienie http://api.jquery.com/on/

+0

Dzięki za link i wyjaśnienie. Zgaduję, że trzymam się pierwszej wersji. – frequent

+0

Myślę, że pierwszy i drugi przykład pomieszały się. Pierwszy to "bezpośredni", drugi to "delegowany". –

+0

Myślę, że twoja właściwa dzięki rakiecie :) – codaniel