【问题标题】:Can there be or is there a Javascript addEventListener multiple arguments on single line helper function?单行辅助函数中是否存在或是否存在 Javascript addEventListener 多个参数?
【发布时间】:2012-09-16 06:50:47
【问题描述】:

是否有或者已经有一些东西,可以让我为不同的元素添加具有多个功能的多个事件侦听器......在一行上?也许一个例子可以帮助我解释......

我在我的代码中遇到了这样的情况:

inputUrl.addEventListener ('keydown', saveOptions);
inputUrl.addEventListener ('keydown', resizeInput);

inputUrl.addEventListener ('keyup', saveOptions);
inputUrl.addEventListener ('keyup', resizeInput);

inputUrl.addEventListener ('click', saveOptions);
inputUrl.addEventListener ('click', resizeInput);

inputDirectory.addEventListener ('keydown', saveOptions);
inputDirectory.addEventListener ('keydown', resizeInput);

inputDirectory.addEventListener ('keyup', saveOptions);
inputDirectory.addEventListener ('keyup', resizeInput);

inputDirectory.addEventListener ('click', saveOptions);
inputDirectory.addEventListener ('click', resizeInput);

似乎在此过程中有一些东西可以缩短代码!

makeEvents("inputUrl,inputDirectory|saveOptions,resizeInput|keydown,keyup,click")

我希望这是有道理的。有任何想法吗?如果这样的事情已经存在,我想知道。否则,也许我可以创建一个辅助函数(称为 makeEvents 或其他东西),它会拆分字符串,然后为每个元素,然后是每个函数,附加每个事件?

我知道我现有的代码逻辑目前并不完全合理,但我很好奇这是否可以轻松完成或已经存在。

【问题讨论】:

    标签: javascript function events addeventlistener dom-events


    【解决方案1】:

    尝试以下方法:

    inputUrl.addEventListener ('keyup', function() { saveOptions(); resizeInput(); });
    

    这样,“keyup”事件将调用这两个函数,您可以更好地控制它们被调用的顺序。

    【讨论】:

    • 这是个好主意,它会节省一半的空间。谢谢。
    【解决方案2】:

    jquery可以将多个事件绑定到多个元素

    $(inputUrl).add(inputDirectory).bind("keydown, keyup, click", function(){
         resizeInput(this);     
         saveOptions(this);
    });
    

    【讨论】:

    • 假设 OP 可以使用 jQuery,这是一个很好的解决方案。我的回答假设您特别需要 javascript 并且不能使用 jQuery。
    • 我喜欢这个想法,但不确定我是否准备好使用/学习 jquery。只包含 jquery 文件并尝试一下似乎很容易。我会尝试这个,因为它似乎是最易于管理且扩展速度最快的方法。谢谢。
    • 不要担心 jQuery,它就像包含脚本然后在需要的地方使用它一样简单。它的文档也非常好 docs.jquery.com 。当然,如果您发现自己陷入困境,请回来并发布另一个问题。 jQuery 的回答很快。
    • 我已经开始使用 jQuery,到目前为止它非常令人兴奋!虽然我会确保我不会过度使用它,但我会使用它足以让它值得包含该文件。我也喜欢他们提供的所有示例。再次感谢!
    【解决方案3】:

    你很幸运有人发明了函数

    function setupEvents(element, action)
    {
        element.addEventListener("keydown", action);
        element.addEventListener("keyup", action);
        element.addEventListener("click", action);
    }
    
    function setupActions(element)
    {
        setupEvents(element, saveOptions);
        setupEvents(element, resizeInput);
    }
    
    setupActions(inputUrl);
    setupActions(inputDirectory);
    

    【讨论】:

    • 这似乎是一个易于管理的解决方案,而且我已经习惯了。当事情变得更复杂时,它可能会变得更大。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多