Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用默认值覆盖tap事件_Javascript_Jquery - Fatal编程技术网

Javascript 使用默认值覆盖tap事件

Javascript 使用默认值覆盖tap事件,javascript,jquery,Javascript,Jquery,我有很多: $('#element').on('tap', function(){ // some code .. }) $('#element').on('tap', function(e){ e.preventDefault(); // some code .. }) 我搜索了两次有关点击事件问题的许多问题,并使用e.preventDefault()解决了我的问题,现在我有很多: $('#element').on('tap', function(){ //

我有很多:

$('#element').on('tap', function(){
    // some code ..
})
$('#element').on('tap', function(e){
    e.preventDefault();
    // some code ..
})
我搜索了两次有关
点击
事件问题的许多问题,并使用
e.preventDefault()
解决了我的问题,现在我有很多:

$('#element').on('tap', function(){
    // some code ..
})
$('#element').on('tap', function(e){
    e.preventDefault();
    // some code ..
})

好的,但正如我所说,我有很多这样的调用,我不喜欢每次都写
e.preventDefault()
,然后我在chrome的控制台上键入
$.fn。点击
,它显示了:

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()
中那样工作

我没有看到任何明显的东西,对此我也没有任何想法


任何帮助或想法都将不胜感激。提前感谢。

我遇到了一个类似的问题,在这个问题中,
e.preventDefault()
可以在某些情况下工作,但不能在其他情况下工作。它没有显示错误,并且使用
try-catch
未显示
catch警报。添加
e.stopImmediatePropagation()
成功了,以防它对任何人都有帮助

这就是创建
$的方法。fn.点击
:-

$.fn.tap = function(f) {
  $(this).on('tap', function(e) {
    e.preventDefault();
    f();
  });
  return this;
};

//usage
$('.selector').tap(function() {
  alert('foo bar')
})
@Washington Guedes-覆盖默认点击事件以始终使用e.preventDefault() 而不是从$(element).on('tap',function(){})更改为 $(元素).tap(函数(){})

您可以将代理事件添加到
主体
,以便
点击
,而无需指定目标。然后,这将为主体上的所有
tap
事件触发,然后您可以检查目标是否有自己的
tap
事件,这样您就可以
e.preventDefault()

注意:这不适用于委托的
点击
事件,如图所示

//全局抽头处理程序
$('body')。打开('tap',函数(e){
如果($。_数据(例如,目标,“事件”)。点击)
e、 预防默认值();
});
//抽头活动
$('a.tap')。打开('tap',函数(e){
$(this.css('color','red');
});
//委托抽头活动
$('body')。打开('tap','a.delegate',函数(e){
$(this.css('color','green');
});
a{
显示:块;
利润率:20px0;
}

我知道这可能是个坏主意,但我刚刚在Chrome上测试过

$('*').on('tap',function(e){
    e.preventDefault();
});

$('#element').on('tap', function(){
    // some code ..
});
如果您不需要所有元素都使用此选项:

$('*').not('#aCertainElement').on('tap',function(e){
    e.preventDefault();
});

jQuery的一个很酷的特性(我通常不会在一句话中使用'jQuery'和'cool')是,它允许您使用
$.event.special
对象为事件指定自定义行为

在这个问题上有很多问题,所以举个小例子就可以了。 使用
click
事件的工作小提琴(因为这对我在笔记本电脑上写字更方便)

转换为请求在实际处理程序之前调用所有
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
)实际上是一个非常可行的解决方案,因为它不会干扰事物的默认(=预期)行为


从我提供的链接中,您还应该能够创建自己的事件类型(例如,
tapOnly
),并使其更明显地包含一些自定义工作。同样,这两种解决方案都要求您更改事件绑定,这正是您试图阻止的。

$.fn.tap
创建一个名为
$('#元素')的函数。tap()
,它不创建事件函数(e){e.preventDefault();e.stopPropagation();}尝试返回false。如果你在函数中开火jqyer@adeneo. 看到@BG101的答案,我想我明白了,但是。。那么,如何覆盖
.on('tap',func..
?或者只能覆盖
.tap(func..
?@WashingtonGuedes-不,您可以直接更改jQuery的事件处理,我会发布一些东西,这太棒了!!…我刚刚将您的代码更改为
$.event.special.tap.add=function(){…
因为
对象{tapholdThreshold:750,emitTapOnTaphold:true}
已被替换,
点击
事件失败,但现在它工作得很好!感谢您向我介绍
特殊
。这是我应得的赏金。+1谢谢!我已更新了代码示例,以反映您的建议@WashingtonGuedes,这实际上防止了其他值被覆盖。