【问题标题】:Touch event not firing on iOS <a> tag触摸事件未在 iOS <a> 标签上触发
【发布时间】:2014-11-27 08:55:10
【问题描述】:

我的网页上有一个链接,该链接使用target="_blank" 打开一个新标签。它还有一个绑定到它的click 事件,当用户单击链接时也应该触发。

但是,在移动设备上(目前在 iOS7 上使用 Chrome 进行测试),当用户单击链接时,我似乎无法触发此事件。该链接应在新选项卡中打开,但该事件似乎没有触发 - 尽管当我在 Chrome 上的移动模拟器中进行测试时,它确实触发了。我尝试绑定到clicktouchstarttouchend 事件,但它们似乎都不起作用。

当用户在移动设备上点击 &lt;a target="_blank"&gt; 标记时,我如何才能触发点击或触摸事件?


以下是我目前使用的代码。虽然项目是 Angular 的,但我提供了 Angular 和 jQuery 版本,因为事件处理程序不是 Angular 特定的。

Angular 版本(包括项目中的ngTouch):

<a id="mylink" href="http://external-link.com" target="_blank"
   ng-click="functionToBeCalled()"
    >Click me!</a>

Angular 版本 2:

<a id="mylink" href="http://external-link.com" target="_blank"
       on-touch="functionToBeCalled()"
        >Click me!</a>

<script>
    angular.module('myModule').directive('onTouch', function () {
        return {
            scope: {onTouch: '&'},
            link: function (scope, elem, attr) {elem.bind('touchstart', function(){scope.onTouch();});}
        }
    });
</script>

jQuery 中的等价物:

<script>
    $('#mylink').bind('touchstart', function () {
        console.log("Touch event was fired!");
    });
</script>

【问题讨论】:

    标签: javascript jquery angularjs events mobile


    【解决方案1】:

    元素的默认行为会覆盖您所做的触摸事件处理。 为什么要触发触摸事件并同时具有默认链接行为?

    你可以做一个 preventDefault:

     <script>
     $( "a" ).click(function( event ) {
       event.preventDefault();
       open link here with function
       handle touch here with function
     });
     </script>
    

    并使用脚本处理所有事情。您可以从那里通过脚本在新窗口中启动链接,并从那里触发您的触摸事件。

    【讨论】:

    • 点击跟踪是主要原因。谢谢!n 希望避免使用 JavaScript 打开新标签,因为可能存在浏览器弹出阻止行为。
    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2017-04-21
    • 2011-02-21
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多