禁用iOS Safari中链接的默认拖动行为

时间:2011-09-22 23:40:25

标签: javascript html css ios safari

我正在开发一个网络应用程序。我试图禁用链接上的大多数默认iOS Safari行为,所以我在链接上设置“-webkit-touch-callout”CSS属性为“none”。但是,我仍然注意到,如果我将手指放在链接上一秒左右,然后拖动它,然后放开它,链接将在新窗口中打开。我不想要这种行为。我想要在同一个窗口打开,或者什么也不做。有谁知道如何实现这一目标?

编辑:我正在使用jQuery,因此可以使用jQuery的事件处理函数,如果这样可以简化事情。

编辑2:对于某些链接,我使用处理程序来覆盖其默认行为。例如:

$(".categoryList a").live("click", function(e) {
    e.preventDefault();
    $.get(
        "someOtherUrl",
        {someVariable: "someValue"},
        function(result) {
            $(".result").html(render(result));
        }
    );
});

我的实际代码比这更复杂,但我的观点是我在某些链接上覆盖了默认的点击操作,我用来解决此问题的任何解决方案都不应该干扰这些处理程序。 Sanooj的解决方案不能用于我的目的,因为“window.location”赋值总是重定向浏览器,无论我是否有任何处理程序来阻止此行为。也许我可以说不应该为此目的使用链接,但这是应用程序在我开始工作之前的方式,并且改变这将是一个大项目。我想知道是否有更简单,更简单的方法来解决这个问题。

5 个答案:

答案 0 :(得分:9)

请检查

$('a').live('click', function (event) {
    event.preventDefault();
    window.location = $(this).attr("href");
});

答案 1 :(得分:1)

在加载ajax内容并检测手指移动之前设置超时:

 function setupAnchorClicks() {
  var timer = null;
  $(".categoryList a").live("click", function(e) {
    e.preventDefault();

    timer = setTimeout(function() {
       // ...
    }, 1000);

  }).live("touchmove", function() {
    clearTimeout(timer);
  });
}

setupAnchorClicks();

这可能无法开箱即用,因为我是一个糟糕的javascript编码器,但你明白了这一点:)

答案 2 :(得分:0)

我不知道这是否有效,但在默认的webkit(chrome / safari)中,您设置属性ondragstart="return false;"以禁用默认拖动行为。

答案 3 :(得分:0)

我知道你说你已经尝试过了,但是你可能遇到了一个特殊问题。你可以尝试这样的事情。

* {
    -webkit-touch-callout: none !important;
}

希望这有帮助。

如果这不能解决您的问题,请尝试here

答案 4 :(得分:0)

要解决Sanooj解决方案的问题,您是否尝试过在他建议的代码中调用自己的函数?例如:

$('a').live('click', function(event)
{
    if($(this).hasClass('categoryList'))
        categoryListSpecificFunction();
    event.preventDefault();
    window.location = $(this).attr("href");
});

目前我无法使用Web App对其进行测试,但它在普通浏览器中适用于我,即它可以阻止正常行为,但也允许我根据类调用特定函数。