你应该如何使用jQuery .on将上下文传递给命名函数?

时间:2014-04-22 16:14:36

标签: javascript jquery

我有一个我需要从几个不同的地方调用的函数,该函数在单击'a'标签或从提交事件运行后运行,并且在所有三个实例中我需要阻止默认但我收到错误'无法阻止默认未定义'。

$('a#Link').on('click', supaFunc);

function supaFunc(e) {
    e.preventDefault();

    // do all the things...

}

看一下文档,但我还没解决。我确定它与上下文有关,我可以让这个工作买。在.on方法中调用匿名函数,工作正常,但我不想重复这个函数三次。

2 个答案:

答案 0 :(得分:1)

jQuery事件处理程序应始终将事件作为其第一个参数。如果它未定义,我怀疑你在某个地方以不同的方式调用处理程序。

要了解的位置和方式,请尝试将代码更改为

function supaFunc(e) {
    if (typeof e === 'undefined') {
      debugger;
    }
    e.preventDefault();
}

现在,在没有参数的情况下调用函数时,调试器将启动。

打开浏览器的开发者工具,然后重新加载/运行该页面。出现问题时,请向下按调用堆栈,直到找到调用supaFunc的位置,而不将事件作为参数。

enter image description here

Chrome开发者工具调试器的示例图片。

答案 1 :(得分:0)

在所有三种情况下可能都不存在<a id="link"></a>,错误似乎指向了这一点。