$(document).ready(function() {
//set initial state.
$('#textbox1').val($(this).is(':checked'));
$('#checkbox1').change(function() {
$('#textbox1').val($(this).is(':checked'));
});
$('#checkbox1').click(function() {
if (!$(this).is(':checked')) {
return confirm("Are you sure?");
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" id="checkbox1"/><br />
<input type="text" id="textbox1"/>
Tutaj .change()
aktualizuje wartość pola tekstowego o status pola wyboru. Używam .click()
do potwierdzenia akcji przy odznaczeniu. Jeśli użytkownik wybierze opcję anuluj, znacznik wyboru zostanie przywrócony, ale zostanie uruchomiony .change()
przed potwierdzeniem.
To pozostawia niespójny stan, a pole tekstowe mówi fałsz, gdy pole wyboru jest zaznaczone.
Jak poradzić sobie z anulowaniem i zachować spójność wartości pola tekstowego ze stanem czeku?
javascript
jquery
event-handling
Profesor Chaos
źródło
źródło
Odpowiedzi:
Testowane w JSFiddle i wykonuje to, o co prosisz. Ta metoda ma dodatkową zaletę uruchamiania po kliknięciu etykiety powiązanej z polem wyboru.
Zaktualizowana odpowiedź:
Oryginalna odpowiedź:
źródło
this.checked
zamiast$(this).is(':checked')
: jsperf.com/prop-vs-ischecked/5this.checked
napisanie + natywny javascript jest znacznie krótsze, może być ogólnie warte użycia (oprócz tego, że jest ~ 200 do 300 razy szybszy).Próbny
Posługiwać się
mousedown
źródło
Większość odpowiedzi nie złapie (prawdopodobnie), jeśli użyjesz
<label for="cbId">cb name</label>
. Oznacza to, że kliknięcie etykiety spowoduje zaznaczenie pola zamiast bezpośredniego kliknięcia pola wyboru. (Nie do końca pytanie, ale często pojawiają się tutaj różne wyniki wyszukiwania)W takim przypadku możesz użyć:
Earlier versions of jQuery:
Przykład JSFiddle z jQuery 1.6.4
jQuery 1.7+
Przykład JSFiddle z najnowszym jQuery 2.x
źródło
Cóż ... tylko w celu zaoszczędzenia bólu głowy (tutaj jest już po północy), mógłbym wymyślić:
Mam nadzieję, że to pomoże
źródło
Dla mnie działa to świetnie:
źródło
Tu masz
HTML
JavaScript
źródło
Pozbądź się zdarzenia zmiany i zamiast tego zmień wartość pola tekstowego w zdarzeniu kliknięcia. Zamiast zwracać wynik potwierdzenia, złap go w var. Jeśli to prawda, zmień wartość. Następnie zwróć var.
źródło
Problem polega na kliknięciu pola wyboru i sprawdzeniu wartości w tej samej pętli zdarzeń.
Spróbuj tego:
Demo: http://jsfiddle.net/mrchief/JsUWv/6/
źródło
jeśli korzystasz z iCheck Jquery, użyj poniższego kodu
źródło
Spróbuj tego
źródło
źródło
źródło
źródło
Późna odpowiedź, ale możesz także użyć
on("change")
źródło
wystarczy użyć zdarzenia kliknięcia, moim identyfikatorem pola wyboru jest CheckAll
źródło
uzyskaj wartość radiową według nazwy
źródło
Nie jestem pewien, dlaczego wszyscy to komplikują. To wszystko co zrobiłem.
źródło
źródło