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,这实际上防止了其他值被覆盖。