jQuery编码标准&最佳实践(分离事件和功能)

时间:2014-03-17 13:11:24

标签: javascript jquery

我一直在阅读this article,建议将事件与功能分开。但我如何e.preventDefault()喜欢这个?

$("#myLink").on("click", function(){...}); // BAD


// GOOD
function myLinkClickHandler(){...}
$("#myLink").on("click", myLinkClickHandler);

1 个答案:

答案 0 :(得分:1)

在我看来,如果出现以下情况,建议先定义一个函数,然后将其指定为事件监听器:

  1. 同一个函数可以用作另一个事件的事件处理程序。在这种情况下,定义内联处理程序意味着重复代码。
  2. 您希望能够轻松删除该特定事件处理程序。在这种情况下,定义事件处理程序内联意味着,要删除它,您可能必须将.off方法与事件命名空间一起使用,以避免删除可能附加到同一对象和事件的其他事件处理程序的风险
  3. 但是如果你只是设置一个不会被重用的事件处理程序,我会将它定义为内联,因为,至少对我来说,它可以更容易地跟踪执行哪些代码作为对事件的响应

    无论如何,如果你想访问jQuery传递给事件处理程序的Event对象,无论你使用什么方法,都可以轻松完成:

    //inline
    $('#myLink').on('click', function(e) { e.preventDefault(); });
    
    //previous function:
    function linkClickHandler(e) {
        e.preventDefault();
    }
    
    $('#myLink').on('click', linkClickHandler);
    

    jQuery总是将Event对象传递给处理程序,定义函数的位置无关紧要。实际上,jQuery不知道你使用了哪种方法。