【问题标题】:Touchend fired before blurTouchend 在模糊之前触发
【发布时间】:2013-10-04 19:47:10
【问题描述】:

我正在尝试使用“touchend”来实现“tap”事件。不幸的是,当关注输入时,输入的 'blur' 事件会在 'touchend' 之后触发。

重现:焦点输入 => 点击按钮

$(body).append("<div id='abc'>" +
    "<input class='text' type='text'/>" +
    "<button href='#'>save</button>" +
    "</div>");
var $input = $("#abc").children("input");
$input.bind("blur", function () {
    alert("blur");
});
var $button = $("#abc").children("button");
$button.bind("touchend", function (event) {
    alert("touchend");
});

【问题讨论】:

    标签: javascript jquery touch


    【解决方案1】:

    “touchend”事件不是“click”事件。要模拟“点击”事件,需要在执行点击逻辑之前设置焦点。 下面是做这个伎俩的代码。不要看全局变量,这只是想法。也没有检查多点触控等。

    $(body).append("<div id='abc'>" +
        "<input class='text' type='text'/>" +
        "<button href='#'>save</button>" +
        "</div>");
    var $input = $("#abc").children("input");
    $input.bind("blur", function () {
        alert("blur");
    });
    var $button = $("#abc").children("button");
    $button.bind("touchend", function (event) {
        if (!swipeDetected) {
            $button.focus();
            //Click logic here
        }
        alert("touchend");
    });
    
    var swipeDetected = false,
        startPos = null;
    $(document.body).bind("touchstart", function (event) {
        swipeDetected = false;
        var touchEvent = event.originalEvent.touches[0];
        startPos = {
            pageX: touchEvent.pageX,
            pageY: touchEvent.pageY
        };
    });
    $(document.body).bind("touchmove", function (event) {
        var touchEvent = event.originalEvent.touches[0];
        if (Math.abs(startPos.pageX - touchEvent.pageX) > 10 || Math.abs(startPos.pageY - touchEvent.pageY) > 10) {
            swipeDetected = true;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2015-08-07
      • 2017-10-30
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多