2011-06-24 10 views
5

Wprowadzam funkcję typu "Adres rozliczeniowy jest taki sam jak adres", który po zaznaczeniu pola wyboru wypełnia pola na podstawie innych pól. Działa świetnie.Pole wyboru Jquery Trigger: funkcja związana ze zdarzeniem kliknięcia występuje przed ustawieniem atrybutu zaznaczonego

Funkcja dla zdarzenia click ..

if ($(this).attr('checked')) { 
     // copy address fields to billing fields 
    } 
    else{ 
     // clear fields 
    } 

Teraz używam (plugin jquery skrótu) wydarzenie auto wypełnić wszystkie pola w formularzu, dzięki czemu można łatwo i szybko demo i przetestować formę . Zamiast oszukiwania i wypełnienie pól rozliczeniowego pól adresowych chcę użyć

$("#CheckboxForAutofillId").trigger('click'); 

To nie działa jak pierwszy raz ogień zdarzenie, jak w powyższej funkcji, która nazywa się to sprawdza atrybutu sprawdzone, jednak wyzwalacz ("kliknięcie"), najwyraźniej wywołuje zdarzenie PRZED zmianą atrybutu.

Co oznacza dla mnie, aby zasymulować poprawnie muszę to zrobić ..

$("#CheckboxForAutofillId").attr("checked", "checked"); // sets checked 
$("#CheckboxForAutofillId").trigger('click');   // fires event then 'unchecks' 
$("#CheckboxForAutofillId").attr("checked", "checked"); // rechecks 

Czytanie strony jquery za spust, nie zauważyłem ten wspomniał, a ja nie przeszkadzało kopać przez źródło, aby zobaczyć, co faktycznie się dzieje, ale wydaje mi się, że idealnie zdarzenie wyzwalające powinno ustawić atrybut "sprawdzony" przed wystrzeleniem samego zdarzenia, ponieważ jest to lepsza symulacja osoby sprawdzającej pole wyboru?

Czy brakuje mi czegoś?

Odpowiedz

8

powinieneś użyć change() zamiast click().

$("#CheckboxForAutofillId").change(function() 
{ 
    if(this.checked) ... 
}); 
+1

Zawsze chętnie widzę właściwe użycie miksu js/jquery +1 – BumbleB2na

Powiązane problemy