我正在开发一个插件,扩展了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也不抱怨 – 到底是什么?
解决方法
是否有任何范围可用于委派给他们?委托的目的是定位一个你知道将永远存在并且可见的元素,然后从那里委托给在脚本的整个生命周期中可能出现的元素.
试试这个:
this.container.on('click','.ranges .daterangepicker_start_input,.ranges .daterangepicker_end_input',this));
更新:
如果我发出如下语法错误,我可以重现此问题:
$('.target').on('click','.thing',$.proxy(this.doStuff),this);
如果我移动,那么它按预期工作.
$('.target').on('click',$.proxy(this.doStuff,this));
你有类似的事情吗?粘贴它的代码应该没问题. I made a jsFiddle to try and isolate the issue.