2013-03-29 5 views
6

Próbowałem wiele pomysłów znalazłem tutaj, aby usunąć zaznaczenie pola wyboru, gdy jest zaznaczone pole wyboru inny, ale żaden z nich nie działa ...JQuery funkcja .prop nie działa odznaczyć pole

Prawy ja teraz mam:

$("#chkBox1").click(function() { 
if ($(this).is(":checked")) { 
    $('#chkBox2').prop('checked', false); } 
}); 

..ale bez rezultatów, chkBox2 pozostaje sprawdzone

tu jest pole wyboru w HTML:

<input type="checkbox" name="art" id="chkBox1" data-mini="true" data-theme="c" /> 

Jedną z możliwych różnic w moim kodzie jest to, że pola wyboru są dodawane do strony tylko po kliknięciu przycisku, przy pomocy href ... pola wyboru są w kodzie HTML (nie są tworzone w JavaScript) .. ale nie są widoczne, dopóki przycisk nie jest kliknięte. Czy to może być część problemu? Czy może brakuje mi czegoś innego? Korzystam również z JQuery Mobile.

+0

Korzystanie identyfikatory dla wyboru w JQM jest chyba zły pomysł (za pomocą identyfikatora w Ogólne nie jest bardzo bezpieczne w JQM ze względu na sposób obsługi buforowania stron w JQM). Najprawdopodobniej właściwy element nie został wybrany. –

+0

Możesz zmienić '$ (this) .is (": checked ")' na '$ (this) .prop (" checked ")' lub nawet 'this.checked'. Byłoby to bardziej bezpośrednie, ale nie powinno wpływać na wynik. –

+0

@KevinB oh tak ... nie zauważyłem, że to jqm - http://api.jquerymobile.com/pageinit/ –

Odpowiedz

12

trzeba odświeżyć ją po zmieniając .prop, używając .checkboxradio('refresh').

Demo

// Check #chkBox2 by default 
$('#chkBox2').prop('checked', true).checkboxradio('refresh') 

// Uncheck #chkBox2 when #chkBox1 is checked 
$('#chkBox1').on('click', function() { 
if ($(this).is(':checked')) { 
    $('#chkBox2').prop('checked', false).checkboxradio('refresh'); 
} 
}); 
+0

+1 tutaj jest dokumentacja, dlaczego twoja odpowiedź działa http://jquerymobile.com/demos/1.0a4.1/docs/forms/forms-checkboxes.html –

+0

dziękuję, wymyśliłem tę odpowiedź tak, jak ją pisałeś! – JasonBK

+0

To jest właściwy sposób jQuery Mobile – Gajotres

-1

sprawdzasz this oraz zmianę chkBox2:

if ($(this).is(":checked")) { 
    $('#chkBox2').prop('checked', false); } 

Spróbuj to zamiast:

if ($('#chkBox2').is(":checked")) { 
    $('#chkBox2').prop('checked', false); } 

Lub po prostu:

$('#chkBox2').prop('checked', false); 
+0

to w rzeczywistości odnosi się do # chkbox1 –

1

przepraszam, powinienem trzymać czytania!

wydaje się to zrobić trick:

$('#chkBox1').checkboxradio('refresh'); 

..ale nie jestem dokładnie pewien, dlaczego jest to coś wyjątkowego jQuery Mobile?

+0

to naprawdę powinien być komentarz do odpowiedzi poniżej. Ale tak, jeśli spojrzysz na dokumenty http://jquerymobile.com/demos/1.0a4.1/docs/forms/forms-checkboxes.html pokazuje, że potrzebujesz wywołać odświeżenie –

+0

ps Widzę, że ktoś inny odpowiedział na to pytanie w ten sam sposób w tym samym czasie! – JasonBK

+0

@JasonBK cieszę się, że zadziałało lub ty;) – Omar

0

Html

<input type="checkbox" name="art" id="chkBox1" data-mini="true" data-theme="c" /> 
<input type="checkbox" name="art2" id="chkBox2" data-mini="true" data-theme="c" checked="checked" /> 

jQuery:

(function ($) { 
$(document).ready(function() { 
    $("#chkBox1").click(function() { 
     if ($(this).is(":checked")) { 
      $('#chkBox2').prop('checked', false); 
     } 
    }); 
}); 
})(jQuery); 

przykład Praca tutaj http://jsfiddle.net/SwmN6/75/

0

Nie dotyczy jQuery Mobile (brakowało komentarz OP o telefonach), po prostu standardowym jQuery.

Umieść zameldowanie wyboru 2, jeśli pole 1 jest zaznaczona i pole 2 jest również zaznaczona

W przeciwnym razie pole 1 jest sprawdzana i pole 2 jest zaznaczone pole wyboru 2 jest zaznaczona

Pole wyboru 2 ma funkcjonalność na check/usuń zaznaczenie z pola wyboru Przykład 1.

robocza: http://jsfiddle.net/tuxzn/

działa w chrome, FF, IE10

<ol> 
    <li> 
     <input name="check[1]" type="checkbox" checked="checked" value="1" /> 
    </li> 
    <li> 
     <input name="check[2]" type="checkbox" value="1" /> 
    </li> 
</ol> 

gadatliwy Metoda

(function($){ 
    $(document).ready(function(){ 
     $('input[name="check[1]"]').change(function(e){ 
      if($(this).is(':checked')){ 
       $('input[name="check[2]"]').prop('checked', false); 
      }else{ 
       $('input[name="check[2]"]').prop('checked', true); 
      } 
     }); 
    }); 
})(jQuery); 

Krótszy Metoda(z telefonu komórkowego) http://jsfiddle.net/Ag9Cn/

 $('input[name="check[1]"]').change(function(e){ 
      $('input[name="check[2]"]').prop('checked', !!!$(this).is(':checked')) 
      .checkboxradio('refresh'); //mobile support 
     });