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

Stop added event listener functions after one returns false

本文关键字:事件 侦听器 函数 添加 返回 false      更新时间:2023-09-26

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

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

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

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;   
        }
    });
}

执行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