仅使用jQuery的Firefox错误 - handleObj.handler.apply不是一个函数

时间:2014-03-23 08:53:44

标签: jquery firefox

我正在开发一个扩展Dan Grossman的游戏选择器的插件。 Here's my repo。请原谅我的杂乱代码,这仍然是一项正在进行中的工作。我的问题是Firefox没有识别点击输入。 This is相关专栏:

this.container.find('.ranges')
    .on('click', 
        '.daterangepicker_start_input, .daterangepicker_end_input',   
        $.proxy(this.focusInput, this));

现在功能focusInput本身确实很重要,因为我在它的顶部添加了一个简单的console.log,而且很明显它并不是很明显正在运行(添加断点也没有帮助)。

我认为这可能是因为我使用了禁用输入,但改变它并没有帮助(并且它不应该是一个问题,因为事件是通过父元素捕获的)。

我从Firefox控制台收到的错误消息是:

TypeError: handleObj.handler.apply is not a function       jquery-1.11.0.js:4995
TypeError: handleObj.handler.apply is not a function       jquery-1.11.0.js:4624

这告诉我问题是jQuery(我很难相信)。我猜错了我做错了导致jQuery出错,但是由于Chrome没有抱怨,我很难跟踪我到底出错的地方。

我很乐意得到一些帮助。提前致谢!

更新

我已经更新了github中的代码。现在点击不仅适用于最初隐藏的元素(呃......没有意义),但更重要的是 - 我没有得到任何错误。所以我被卡住了。我不知道FF的问题是什么。即使是Internet Explorer也没有抱怨 - 这到底是什么?

3 个答案:

答案 0 :(得分:6)

委派给他们时是否有可用的范围?委托的目的是定位一个你知道将永远存在并且可见的元素,然后从那里委托给在整个生命周期中可能出现的元素。

试试这个:

this.container.on('click',
    '.ranges .daterangepicker_start_input, .ranges .daterangepicker_end_input',
    $.proxy(this.focusInput, this));

<强>更新

如果我发出如下语法错误,我可以重现此问题:

$('.target').on('click', '.thing', $.proxy(this.doStuff), this);

如果我移动它,那么它按预期工作。

$('.target').on('click', '.thing', $.proxy(this.doStuff, this));

你有类似的事情吗?粘贴它的代码应该没问题。 I made a jsFiddle to try and isolate the issue.

答案 1 :(得分:0)

当我在下面不小心输入错误的函数名doStuff时,我遇到了这个问题:

$.proxy(this.doStuff, this)

在我将其更改为正确的名称后,问题就解决了。

答案 2 :(得分:0)

我收到错误语法的错误。以下是我在将函数从$(document).click(function(){ });转换为on('click')函数时输入的代码,

我键入的语法错误,

$(document).on('click',".removeDataTableItem").click(function(){
    // code block
});

而不是

$(document).on('click',".removeDataTableItem",function(){
    // code block
});