【问题标题】:mouse event still fired on touch event even with preventDefault set即使设置了 preventDefault,鼠标事件仍然会在触摸事件上触发
【发布时间】:2014-07-10 05:50:54
【问题描述】:

这里有什么我误解了吗?我经常在我的网站中使用如下代码,我想在桌面和 iPad 设备上工作:

$("#someElement")
    .on( "mousemove", function(e) {         
        alert ( "I am still here" );
        // undesired code for ipad here
    } )
    .on( "touchmove", function(e) {
        e.preventDefault();
        // only desired code for ipad use here
    } );

我在很多地方读到 e.preventDefault 应该杀死附加的鼠标事件。并且首先详细说明了触摸事件。然而,我现在意识到警报仍然在我的 ipad 上触发。为什么?有什么提示吗?提前致谢!

编辑: 我意识到当我使用“touchstart”而不是“touchmove”时,e.preventDefault() 会以预期的方式工作。来吧,伙计们,一些想法!

【问题讨论】:

  • 看看我的回答,可能对你有用,做个简单的代码
  • 谢谢!我会记住的。看起来很酷。但仍然:我对 e.preventDefault() 的想法是错误的吗?只是为了更深入的了解。

标签: javascript jquery touch mouseevent preventdefault


【解决方案1】:

检查 ipad 的用户代理。只需使用三元运算符以获得更简单的代码

var isIPad = navigator.userAgent.match(/iPad/i) != null;

$("#someElement").on(((isIPad)? "touchmove" : "mousemove" ), 
                         ((isIPad)? gotoIpad : gotoOthers ));

function gotoIpad() {

      alert("I am ipad");
}

function gotoOthers() {

      alert("I am not ipad");
}

【讨论】:

  • 这是一个想法,但我想始终使用原始触摸事件而不是鼠标事件。上面的代码将使我的代码整体更简单。
  • 对不起,我将评论发布到错误的答案:谢谢!我会记住的。看起来很酷。但仍然:我对 e.preventDefault() 的想法是错误的吗?只是为了更深入的了解。
  • 浏览器检测是几年前的一个坏主意quirksmode.org/js/detect.html
【解决方案2】:

试试这个用户代理

    var isTouch = /iPad/i.test(navigator.userAgent);

            if(isTouch ){
            $("#someElement").on( "touchmove", function(e) {
                       // only desired code for ipad use here
                } );
            }
     else{
            $("#someElement")
                .on( "mousemove", function(e) {         
                    alert ( "I am still here" );
                    // undesired code for ipad
                });
            }

【讨论】:

  • 也谢谢你。好的。所以你说我实际上误解了 e.preventDefault() 行为?我必须同意吗? :-(
  • 我还在某处读到,用户代理解决方案(未来甚至更多)不是最好的解决方案,因为(将有)具有鼠标和触摸敏感性的设备。
  • 浏览器检测多年来一直是个坏主意quirksmode.org/js/detect.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多