$('#element').on('tap',function(){ // some code .. })
我搜索了许多关于点击事件问题的两个问题,我解决了我的问题使用e.preventDefault(),现在我有很多:
$('#element').on('tap',function(e){ e.preventDefault(); // some code .. })
好的,但正如我所说,我有很多这些电话,我不喜欢写每次e.preventDefault(),然后我在chrome的控制台上输入$.fn.tap并显示给我:
function (a){return a?this.bind(c,a):this.trigger(c)}
我试图用这种方法来覆盖它:
$.fn.tap = function (a) { a.preventDefault(); return a?this.bind(c,a):this.trigger(c) }
但它没有像以前的e.preventDefault()那样工作.
我没有看到任何明显的东西,我对此没有理由.
任何帮助或想法是赞赏.提前致谢.
解决方法
有关于这个问题的very little documentation,所以有一个例子是有序的.
一个工作的小提琴使用点击事件(因为这更方便我写在我的笔记本电脑上)can be found here
翻译成您的请求,让所有的tap事件在实际处理程序之前调用e.preventDefault(),如下所示:
$.event.special.tap.add = function(options) { var handler = options.handler; options.handler = function(e) { e.preventDefault(); return handler.apply(this,arguments); } }
这个代码做什么(应该做的,因为我没有实际测试上面的Tap版本)告诉jQuery你需要特别处理tab事件,更特别的是你想提供一个“包装处理程序”,它只做了在调用提供的事件处理程序之前调用e.preventDefault().
更新:阻止未来访问者覆盖默认的点击设置
注意:在尝试更改事物的默认行为之前,您应该问自己为什么默认值不适用于您.主要是因为更改默认(=预期)行为会扰乱您的未来自我(或更糟糕的是另一个人),同时保持代码和添加功能.
为了在你的代码中创建一个可维护的(可预测的)流,建立一个特殊情况函数($.fn.tap)的解决方案实际上是一个非常可行的解决方案,因为它不会干扰默认(= expected)事情的行为
从我提供的链接中,您还应该能够创建自己的事件类型(例如tapOnly),并且更明显地涉及到一些自定义的工作.那么再一次,这两个解决方案将要求您更改事件绑定,这是您尝试防止的.