2012-02-07 24 views
88

我有一些代碼如何使用jQuery處理複選框的更改?

<input type="checkbox" id="chk" value="value" /> 
<label for="chk">Value </label> 
<br/> 
<input type="button" id="But1" value="set value" /> 
<br /> 
<input type="button" id="But2" value="read checked" /> 

的javascript:

$(document).ready(function() { 
    console.log("Ready ..."); 
    registerHandlers(); 

    function registerHandlers() { 
     $('#But1').click(function() { 
      $('#chk').prop('checked', !$('#chk').is(':checked')); 
     }); 
     $('#But2').click(function() { 
      var chk1 = $('#chk').is(':checked'); 
      console.log("Value : " + chk1); 
     }); 

     $('input[type="checkbox"]').change(function() { 
      var name = $(this).val(); 
      var check = $(this).prop('checked'); 
      console.log("Change: " + name + " to " + check); 
     }); 
    } 
}); 

如何處理使用jQuery的複選框的變化? 我需要把處理程序更改任何複選框選中。

[更新]

有一個複選框和幾個按鈕。 每個按鈕都可以更改複選框。 如何捕捉事件更改複選框?

[更新]

我需要辦理變更復選框,在這個例子中jsfiddle。 當我點擊框時,消息「確定」按鈕不顯示。

+0

我真的不明白你的問題嗎?當複選框被改變時應該發生什麼? – Niklas 2012-02-07 16:40:44

+0

什麼問題?此代碼似乎正常工作 – JaredPar 2012-02-07 16:40:49

+2

您能否重新說明您的問題?你已經有$('input [type =「checkbox」]')。change handler,whats wrong? – Madman 2012-02-07 16:41:59

回答

136

使用:checkbox選擇:

$(':checkbox').change(function() { 

     // do stuff here. It will fire on any checkbox change 

}); 

代碼:http://jsfiddle.net/s6fe9/

+65

...和'this.checked'對於確定複選框是否被選中是非常有用的。 – Stefan 2012-02-07 16:42:11

+0

是否可以註冊多個處理程序? – BILL 2012-02-07 17:07:39

+0

是的,您可以根據需要訂閱儘可能多的處理程序。 – Samich 2012-02-07 18:04:42

15

希望,這將有一定的幫助。

$('input[type=checkbox]').change(function() { 
    if ($(this).prop("checked")) { 
     //do the stuff that you would do when 'checked' 

     return; 
    } 
    //Here do the stuff you want to do when 'unchecked' 
}); 
+6

從jQuery 1.6開始,最好使用$(this).prop(「checked」),因爲它會隨複選框的實際狀態動態變化。 – hrabinowitz 2014-02-19 20:55:29

+3

.attr(「checked」)不正確,因爲它沒有在用戶點擊時更新。我確認@ hrabinowitz的評論。 – Adrien 2014-10-27 09:29:45

+0

@hrabinowitz回答更新 – 2016-06-02 20:13:42

49

您可以使用現場的標識以及

$('#checkbox1').change(function() { 
    if($(this).is(":checked")) { 
     //'checked' event code 
     return; 
    } 
    //'unchecked' event code 
}); 
1
$('#myForm').on('change', 'input[type=checkbox]', function() { 
    this.checked ? this.value = 'apple' : this.value = 'pineapple'; 
}); 
+3

請詳細說明您的答案:僅有代碼的解決方案更可能被刪除,因爲他們沒有解釋,只是修復(如果有的話)。 – rekaszeru 2014-12-17 12:42:57

+0

對不起@rekaszeru我會做得更好下一次 – 2014-12-19 10:24:39

6
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) { 

     //do your stuff 

    } 
}); 
+0

請在發佈之前檢查您自己的代碼作品。您的選擇器存在明顯的問題... – Jonathan 2016-06-23 15:56:54

+0

live()已棄用。 – guettli 2017-02-23 08:48:31

0

在我看來removeProp在Chrome中正常工作: jsfiddle

 $('#badBut1').click(function() { 
     checkit('Before'); 
     if($('#chk').prop('checked')) 
     { 
      $('#chk').removeProp('checked'); 
     }else{ 
      $('#chk').prop('checked', true); 
     } 
     checkit('After'); 
    }); 
    $('#But1').click(function() { 
     checkit('Before'); 
     if($('#chk').prop('checked')) 
     { 
      $('#chk').removeClass('checked').prop('checked',false); 
     }else{ 
      $('#chk').addClass('checked').prop('checked', true); 
     } 
     checkit('After'); 
    }); 

    $('#But2').click(function() { 
     var chk1 = $('#chk').is(':checked'); 
     console.log("Value : " + chk1); 
    }); 

    $('#chk').on('change',function() { 
     checkit('Result'); 
    }); 
    function checkit(moment) { 
     var chk1 = $('#chk').is(':checked'); 
     console.log(moment+", value = " + chk1); 
    }; 
+0

如何切換沒有事件的複選框(來自外部):http://jsfiddle.net/k91k0sLu/1/ – 2016-06-30 11:59:42

0

獲得電臺價值名稱

$('input').on('className', function(event){ 
     console.log($(this).attr('name')); 
     if($(this).attr('name') == "worker") 
      { 
       resetAll();     
      } 
    });