簡體   English   中英

為什么動態更改復選框不會觸發表單更改事件?

[英]Why does dynamically changing a checkbox not trigger a form change event?

我寫了這個javascript / jQuery片段來更改復選框。 http://jsfiddle.net/johnhoffman/crF93/

使用Javascript

$(function() {
    $("a").click(function() {
       if ($("input[type='checkbox']").attr('checked') == "checked")
           $("input[type='checkbox']").removeAttr('checked');
       else
           $("input[type='checkbox']").attr('checked', 'checked');
       return false;
    });

    $("input[type='checkbox']").change(function(){ 
        console.log("Checkbox changed.");            
    });    
});​

HTML

<input type="checkbox" />
<a href="#">Change CheckBox</a>​

有趣的是,單擊該鏈接會更改文本框,但不會觸發調用在Chrome Web Developer Console中記錄消息的功能的表單更改事件。 為什么? 我怎么做到這一點?

您需要觸發更改事件, .trigger('change') ,以便事件知道發生了更改。

來自http://api.jquery.com/change/

描述:將事件處理程序綁定到“更改”JavaScript事件,或在元素上觸發該事件。

此方法是前兩個變體中.on( "change", handler )和第三個變量中的.trigger( "change" )的快捷方式。

change事件在其值更改時發送到元素。 此事件僅限於<input>元素, <textarea>框和<select>元素。 對於選擇框,復選框和單選按鈕,當用戶使用鼠標進行選擇時會立即觸發事件,但對於其他元素類型,事件將延遲,直到元素失去焦點。

演示:

http://jsfiddle.net/nPkPw/3/

使用鏈接: http//jsfiddle.net/nPkPw/5/
$("input[type='checkbox']").trigger('change').attr('checked', 'checked');

這並不奇怪,但我猜你可以這樣到msdn中的非效果列表。

  • “當提交內容時會觸發此事件,而不是在值發生變化時觸發此事件。”
  • “當以編程方式更改選定對象的選定選項時,onchange事件不會觸發。”

你總是可以.click .click()jsFiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM