0

我正在重写我的一个插件,我想尝试解决我们过去遇到的问题。

jsFiddle 演示

当您通过单击选中复选框时,将触发更改事件。它正在控制台中记录。

但是,如果您使用它左侧的按钮,则不会触发“更改”。

使用该插件,如果用户使用他们已有的代码动态检查复选框或单选按钮,我希望能够检测到此更改。

有什么想法吗?

HTML:

<input type="button" name="check" value="Checkbox" />
<input type="checkbox" name="newsletter" value="true" />​

jQuery:

$(function() {

    // This toggle checks and unckecks the box
    $('input:button').toggle(function() {
        $('input:checkbox').prop("checked", true);
    }, function() {
        $('input:checkbox').prop("checked", false);
    });


    // Detects change of checkbox           
    $('input:checkbox').on("change", function() {
        console.log('checked!');
    });

});​
4

4 回答 4

2

最简单的解决方法是手动触发更改事件:

$('input:checkbox').prop("checked", true).change();

http://jsfiddle.net/HruGP/1/

编辑:您还可以简化按钮代码而不是使用toggle,只需使用 aclick并将checked属性分配给其当前值的反面:

$('input:button').on('click',function() {
    var $checkbox = $('input:checkbox');
    $checkbox.prop('checked', !$checkbox.is(':checked')).change();
});

http://jsfiddle.net/HruGP/3/

于 2012-09-21T18:44:47.713 回答
0

您可以只触发复选框上的单击事件,而不是手动更改属性:

$('input:checkbox').click();
于 2012-09-21T18:46:49.553 回答
0
$('input:button').click(function(){
    $('input:checkbox').trigger("change");
});

这允许在您单击按钮时触发“更改”事件

于 2012-09-21T18:52:23.730 回答
0

是的,触发复选框,我会这样做(替换小提琴中代码的第一部分):

// This toggle checks and unckecks the box
$('input:button').on('click', function(event){
    $('input:checkbox').trigger('click');             
});

当然,假设您的目标是使按钮成为您选中或取消选中框的方式。

于 2012-09-21T18:53:02.707 回答