我正在开发一个网络应用程序。我试图禁用链接上的大多数默认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”赋值总是重定向浏览器,无论我是否有任何处理程序来阻止此行为。也许我可以说不应该为此目的使用链接,但这是应用程序在我开始工作之前的方式,并且改变这将是一个大项目。我想知道是否有更简单,更简单的方法来解决这个问题。
答案 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对其进行测试,但它在普通浏览器中适用于我,即它可以阻止正常行为,但也允许我根据类调用特定函数。