在返回false后停止添加事件侦听器函数

时间:2013-09-09 14:14:44

标签: javascript jquery

我创建了一个将onblur事件绑定到元素的函数。该函数需要三个字符串变量。元素的id,要绑定到元素的函数以及它可能需要的任何参数。然后在函数中我使用this suggestion来利用字符串来调用函数。

在blur上绑定的每个函数都是一个返回true或false的验证函数。我的目标是使它成为如果向元素添加多个onblur事件,并且其中任何一个返回false,则不会调用下一个。但正如现在所写的那样,即使返回false,每个添加到元素的事件也会触发。

下面我的jquery和javascript版本都添加了多个onblur事件,无论它们返回true还是false,都会触发它们。

this.bindFormElements = function(elementId, ruleName, ruleParameters)
{
    var onBlurEvent = function() 
    {
        if(dynFormSkin[ruleName](this, ruleParameters) == false)
        { 
            return false;   
        }
    };

    document.getElementById(elementId).addEventListener("blur", onBlurEvent, false);
}

...

this.bindFormElements = function(elementId, ruleName, ruleParameters)
{
    $("#" + elementId).blur(function() 
    {
        if(dynFormSkin[ruleName](this, ruleParameters) == false)
        {
            return false;   
        }
    });
}

1 个答案:

答案 0 :(得分:1)

执行return false与执行相同:

event.stopPropagation()
event.preventDefault()

stopPropagation()可防止事件将DOM树冒泡到父元素,而preventDefault()只会阻止任何“默认”操作,例如关注链接。

您要找的是stopImmediatePropagation()。这将停止同一元素(及其父元素)上的任何其他事件处理程序。

this.bindFormElements = function(elementId, ruleName, ruleParameters)
{
    $("#" + elementId).blur(function(event) 
    {
        if(dynFormSkin[ruleName](this, ruleParameters) == false)
        {
            event.stopImmediatePropagation();
            return false;   
        }
    });
};

有关详细信息,请参阅此答案:https://stackoverflow.com/a/5302939