我正在开发一个插件来扩展 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 也没有提示 - 到底是什么??
最佳答案
他们被委托(delegate)时是否有可用的范围?委托(delegate)的要点是定位一个您知道将始终存在且可见的元素,然后从那里委托(delegate)给在脚本的整个生命周期中可能出现和消失的元素。
试试这个:
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.
关于jquery - Firefox 仅在使用 jQuery 时出现错误 - handleObj.handler.apply 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588794/