Ostatnio pracowałem z wieloma checkboxami. Natrafiłem na ten "problem" z wydarzeniem kliknięcia .prevenDefault()
i próbowałem znaleźć rozwiązanie tego problemu. W moim przypadku chciałem móc zdecydować, czy pole wyboru może być zaznaczone/niezaznaczone zgodnie z innymi polami. Czasami musiałem nawet otworzyć okno dialogowe, zanim wydarzenie się rozpaliło. To brzmi łatwiej, niż się okazało ...Pole wyboru Jquery .prop click preventDefault behavior
W this jsFiddle widać, na czym polega problem i jak próbowałem go rozwiązać (patrz także poniższy kod). Większość odpowiedzi sugeruje użycie zmiany zamiast kliknięcia. Ale nie możesz użyć .preventdefault()
.
$('div').off('change','.wtf').on('change', '.wtf', function(e) {
//e.preventDefault();
//return false;
if($(this).prop('checked') == true) {
alert('I am true now, but I must stay false');
$(this).prop('checked', false);
}
else {
alert('I am false now, but I must stay true');
$(this).prop('checked', true);
}
});
Czy to najlepsze rozwiązanie? A może jest jakikolwiek inny sposób, aby pole wyboru czekało dopóki nie zostanie zmieniony jego stan?
Jako przykład: Chciałbym, żeby to pole wyboru nie było zaznaczone, tylko jeśli użytkownik zaakceptuje komunikat w oknie dialogowym, naciskając "OK".
Dzięki za odpowiedź. Nadal uważam te pola za nieco nielogiczne, jeśli porównasz je z obsługą innych elementów formularza ... – Brainfeeder
To prawda, że są nieco inne, ponieważ mają wartość, ale także status włączenia/wyłączenia (zaznaczone lub nie). A to czyni je trudniejszymi. – Spokey
Należy również zauważyć, że zdarzenia typu "kliknij i zmień" są uruchamiane inaczej w Firefoksie i Chrome. Firefox: najpierw kliknij, a następnie zmień. Chrome: pierwsza zmiana, a następnie kliknij. –