javascript – 使用preventDefault覆盖点击事件

前端之家收集整理的这篇文章主要介绍了javascript – 使用preventDefault覆盖点击事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有很多:
$('#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()那样工作.

我没有看到任何明显的东西,我对此没有理由.

任何帮助或想法是赞赏.提前致谢.

解决方法

jQuery的一个很酷的功能(我通常不会在单个句子中使用’jQuery’和’cool’),它允许你使用$.event.special对象来指定事件的自定义行为.

有关于这个问题的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),并且更明显地涉及到一些自定义的工作.那么再一次,这两个解决方案将要求您更改事件绑定,这是您尝试防止的.

原文链接:https://www.f2er.com/js/155265.html

猜你在找的JavaScript相关文章