jQuery解绑功能未按预期工作

3

我有这个 jQuery

$('input#application_submit.bigbutton[value=Agree]').click(function(e){
    e.preventDefault();
    var reason = $('.agree_reason:visible');
    var reason_text = $('.agree_reason:visible textarea');
    if(reason.length == 0){
        $('.agree').show();
    }else{
        if(reason_text.val() == ''){
            $('.agree').show();
            $('#application_agree').css('border', '1px solid #CC0000');
            $('.agree_validation_message').show();
        }else{
            $('input#application_submit.bigbutton[value=Agree]').unbind();
            $('input#application_submit.bigbutton[value=Agree]').click();
        }
    }
});

一切都很顺利,直到取消绑定的时候......我需要它删除此处理程序并执行正常的单击事件,但它会导致浏览器冻结,因为它似乎进入了无限循环......我甚至尝试了jQuery die函数,但也没有运气......有什么想法吗?


@Sneakyness 你指的应该是 return true; - PeeHaa
1个回答

6

您需要将事件类型传递给 unbind

$('input#application_submit.bigbutton[value=Agree]').unbind("click");

此外,根据PeeHaa的评论,“application_submit”是元素ID,由于DOM中的元素是唯一的(或者至少应该是),因此您可以简化为:
$('#application_submit').unbind("click");

在选择元素时,最好使用简单的id进行选择,因为jQuery可以在底层调用本地的document.getElementById方法。

另一个改进方法是:

var reason = $('.agree_reason:visible');
var reason_text = $('textarea', reason); // it is faster to let jQuery search in context

1
此外,我认为您可以像其他任何调用一样链接这些调用:$('input#application_submit.bigbutton [value = Agree]')。unbind(“click”).click(); - Adam Rackis
1
在我们改进代码时:$('input#application_submit')$('input#application_submit.bigbutton[value=Agree]') 更快。后者是不必要的,因为您已经基于唯一的 id 进行了选择器选择。 - PeeHaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接