JQuery:防止在执行特定操作时触发其他事件

时间:2011-03-20 22:27:09

标签: jquery event-handling

正如我在标题中所提到的,我希望防止在我发射另一个事件时触发事件:

我们来看这个例子:

   $(function() {

$("#security_code").bind('change', function () {
  // Do validation and show errors
});

$("#reloadCaptcha").bind('click', function () {
  // generate new captcha and clear 'secuirity code' field

 // clear the field so the user will enter the new generated security code
  document.getElementById('security_code').value = '';
});

});

目的:防止在点击'#reloadCaptcha'时触发'change'事件。

当我点击链接(第二个事件)时,第一个事件也会触发(因为'更改'激活)。我希望在实际点击链接时停止所有“更改”事件。我希望我很清楚。有没有人有任何想法?

是的,我尝试过unQuery,stopPropagation和jQuery文档中的其他函数,但它只是没有用。

请注意,我只想在点击该特定链接时冻结“更改”。在其他情况下,它应该一直有效。

先谢谢你们!我希望有人可以为我澄清这一点。

6 个答案:

答案 0 :(得分:1)

$(function() {

    $("#security_code").bind('change', function () {

        // If #security_code is empty do nothing
        if ($('#security_code').val() == '')
        {
            return;
        }

        // Otherwise validate...

    });

    $("#reloadCaptcha").bind('click', function () {

        // generate new captcha and clear 'secuirity code' field

        // clear the field so the user will enter the new generated security code
        $('#security_code').val('');

    });

});

答案 1 :(得分:0)

除非点击$("#link_id")时触发的代码正在更改元素$("#username"),否则更改事件不应触发......但无论哪种方式event.preventDefault()都可以执行您想要的操作。

答案 2 :(得分:0)

来自jQuery文档:

  

停止进一步的处理程序   在使用一个绑定后执行   .live(),处理程序必须返回   假。调用.stopPropagation()会   没有做到这一点。

您是否尝试使用.live()而不是.bind()并返回false?

答案 3 :(得分:0)

如果没有看到整个代码,很难回答,但以下代码可能会有所帮助。我知道这不是一个完美的解决方案,但可能有所帮助;

$("#username").bind('change', function () {
    if ( $('body').data('linkClicked') !== 1 )
    {
        // Validate field when element loses focus
    }
});

$("#link_id").bind('click', function () {
    $('body').data('linkClicked', 1);
    // Do something when the a specific link is clicked
});

答案 4 :(得分:0)

这是我的代码的新版本:

$(function() {

$("#security_code").bind('change', function () {
  // Do validation and show errors
});

$("#reloadCaptcha").bind('click', function () {
  // generate new captcha and clear 'secuirity code' field

 // clear the field so the user will enter the new generated security code
  document.getElementById('security_code').value = '';
});

});

目的:防止在点击'#reloadCaptcha'时触发'change'事件。

答案 5 :(得分:0)

  
$(function() {
    $("#security_code").bind('change',function() {
        if ($(this).val() == 'something') {
            $(this).bind('change');
             //do something else...
        }
    });

    $("#reloadCaptcha").bind('click',function() {
        $("#security_code").val('').unbind('change');
    });
});

PS: 来自timothyclifford的那个也很好。