25

我编写了这段 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 开发人员控制台中记录消息的函数。为什么?我如何让它做到这一点?

4

2 回答 2

26

您需要触发更改事件.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');

于 2012-04-15T03:16:17.383 回答
10

这并不奇怪,但我想您可以将其列为msdn中的非影响列表。

  • “提交内容时会触发此事件,而不是在值更改时触发。”
  • “以编程方式更改选择对象的选定选项时,不会触发 onchange 事件。”

你总是可以只是.click()jsFiddle

于 2012-04-15T03:16:07.007 回答