jQuery mobile-对于每个实时点击事件,是否应该有等效的点击事件?

时间:2011-06-04 09:04:14

标签: jquery jquery-selectors jquery-mobile

我已将jQuery实时点击事件替换为jQuery移动点按事件以提高响应速度。

我觉得出于兼容性原因这是一个坏主意。

是否有必要同时拥有这两个事件,有没有办法为同一个函数编写它们?

例如('click','tap')

5 个答案:

答案 0 :(得分:33)

Billy的答案非常完整,实际上我使用它的次数非常好。另外,您可能希望查看JQuery Mobile中的vmouse插件,它试图抽象鼠标事件:

 // This plugin is an experiment for abstracting away the touch and mouse
 // events so that developers don't have to worry about which method of input
 // the device their document is loaded on supports.

- https://github.com/jquery/jquery-mobile/blob/master/js/vmouse.js

我一直在玩我正在研究的项目,这些天似乎非常敏感。使用,如:

$('selector').bind('vclick', function () { ...

$('selector').bind('vmousedown', function () { ...

答案 1 :(得分:30)

您可以在一个调用中绑定多个事件,如下所示:

$('selector').bind('click tap',function(){ ... })

这在某些浏览器/手机中可能会很好,但是,这可能会导致某些设备同时触发点击和点击两次。

您可以通过执行某种设备/功能检测并仅添加适当的处理程序来解决此问题...

$('selector').bind( myCustomDetectionFunction() ? 'click' : 'tap' ,function(){ ... })

此外,我认为touchstartmousedown是更好的选择事件。这是因为,在触摸之后,点击事件直到延迟已经过去才会触发,因为系统允许第二次触摸的机会使其成为双击或者成为轻扫手势等等。 <{1}}事件会立即触发,touchstart也会触发,因此应该更具响应性。

答案 2 :(得分:10)

我们开发了一个小脚本来解决这个问题。只需将其包含在全局级别中,您的点击事件将立即触发,而不会出现延迟事件的任何问题。

https://github.com/cargomedia/jquery.touchToClick

答案 3 :(得分:4)

似乎jQuery mobile已经有一个事件就是这样:

$(function(){
    $('selector').bind('vclick', function(e){
        alert('test');    
        return false;
    });
});

答案 4 :(得分:2)

您可以使用jQuery中的vmouse插件。这将解决点击事件(仅限移动设备)的300毫秒延迟以及触发点击和触摸事件的情况。

要获取vmouse插件,请使用jQuery Mobile Download Builder。在jQuery之后但在依赖于此插件的任何脚本之前包含它。

相关事件为vclick,基本用法如下:

$(".selector").on( "vclick", function( event ) {
    // To execute
});