防止多事件触发

时间:2014-07-27 21:01:29

标签: javascript jquery css forms

我又在这里

SEE DEMO HERE

$(document).ready(function () {

    $("#id_priori").on('click', 'li', function(){
        var self = $(this),
            checkbox = self.find(":checkbox")[0];

        checkbox.checked = !checkbox.checked;

        self.toggleClass( 'on', checkbox.checked );
    }).find(":checkbox").each(function(){
       $(this).closest('li').toggleClass('on', this.checked);
    });

    $("#id_tipo").on('click', 'li', 'label', function () {
        var self = $(this),
            radio = self.find(":radio")[0];

        radio.checked = !radio.checked

        $(":radio:not(checked)").each(function () {
            $(this).closest('li').toggleClass("on", this.checked);
        });

    })
        .find(":radio").each(function () {
        $(this).closest('li').toggleClass('on', this.checked);
    });

});

一切正常但是对于标签,当我点击它们时它们不检查,做一些调整似乎一个事件多次触发并且取消它们,尝试设置警报并且你会看到我的内容意味着

任何想法都错了吗?

1 个答案:

答案 0 :(得分:3)

因为您正在接管实际输入的角色,所以您需要允许input元素继续执行自己的行为(http://jsfiddle.net/icodeforlove/rF2FT/2/

if (event.target === checkbox) return;

如果目标是实际的输入元素,您需要做的就是提前返回。现在输入元素正在检查自己,然后你告诉它取消选中它。