1

我有一个功能,每次有人单击复选框时都会执行该功能,并且取决于复选框是选中还是未选中,可能会发生不同的事情。但是,在提交表单后,会加载以前的值,我希望根据是否选中该框来应用相同的更改。这给我留下了两个相同的功能

示例代码:

// !- Bind checkboxes to show divs
        $('input[type="checkbox"]').bind("change", function(){
                if ($(this).is(":checked")) {
                    $("#"+$(this).data('toggle')).show();
                }
                else {
                    $("#"+$(this).data('toggle')).hide();
                }
        });

        // Init checkboxes which are already checked via previous selection
        $('input[type="checkbox"]').each(function(index){
                if ($(this).is(":checked")) {
                    $("#"+$(this).data('toggle')).show();
                }
                else {
                    $("#"+$(this).data('toggle')).hide();
                }

        });

http://jsfiddle.net/ms7EY/

我知道使用绑定,您可以添加多个事件,但是每个函数都不是一个事件,我不确定如何清理它。我是否被迫创建一个单独的函数并继续使用 bind() 和 each() 但对两者都使用回调,还是有更优雅的解决方案?

4

2 回答 2

3

您可以使用.trigger()触发事件,它将执行与所选元素关联的所有更改事件处理程序

    $('input[type="checkbox"]').bind("change", function(){
            if ($(this).is(":checked")) {
                $("#"+$(this).data('toggle')).show();
            }
            else {
                $("#"+$(this).data('toggle')).hide();
            }
    }).trigger('change'); //or .change()

演示:小提琴

于 2013-06-28T03:13:03.773 回答
2

您可以使用以下命令“模拟”更改事件,而不是每个:

$('input[type="checkbox"]').trigger('change')

小提琴:http: //jsfiddle.net/ms7EY/2/

于 2013-06-28T03:13:07.920 回答