Javascript 在iOS Safari中禁用链接的默认拖动行为
我正在开发一个网络应用程序。我正在尝试禁用链接上的大多数默认iOS Safari行为,因此我将链接上的“-webkit touch callout”CSS属性设置为“无”。但是,我仍然注意到,如果我用手指按住链接一秒钟左右,然后拖动它,然后放开它,链接将在新窗口中打开。我不想要这种行为。我希望它要么在同一个窗口打开,要么什么也不做。有人知道如何做到这一点吗 EDIT:我正在使用jQuery,所以如果可以简化事情的话,可以使用jQuery的事件处理函数 编辑2:对于某些链接,我使用处理程序覆盖它们的默认行为。例如:Javascript 在iOS Safari中禁用链接的默认拖动行为,javascript,html,css,ios,safari,Javascript,Html,Css,Ios,Safari,我正在开发一个网络应用程序。我正在尝试禁用链接上的大多数默认iOS Safari行为,因此我将链接上的“-webkit touch callout”CSS属性设置为“无”。但是,我仍然注意到,如果我用手指按住链接一秒钟左右,然后拖动它,然后放开它,链接将在新窗口中打开。我不想要这种行为。我希望它要么在同一个窗口打开,要么什么也不做。有人知道如何做到这一点吗 EDIT:我正在使用jQuery,所以如果可以简化事情的话,可以使用jQuery的事件处理函数 编辑2:对于某些链接,我使用处理程序覆盖它们
$(".categoryList a").live("click", function(e) {
e.preventDefault();
$.get(
"someOtherUrl",
{someVariable: "someValue"},
function(result) {
$(".result").html(render(result));
}
);
});
我的实际代码比这更复杂,但我的观点是,我正在覆盖某些链接上的默认单击操作,我用于解决此问题的任何解决方案都不应干扰这些处理程序。Sanooj的解决方案不适用于我的目的,因为“window.location”分配始终重定向浏览器,而不管我是否有任何处理程序来阻止这种行为。也许我不应该为了这个目的而使用链接,但在我开始开发这个应用程序之前,它就是这样的,改变它将是一个大项目。我想知道是否有更简单的方法来解决这个问题。我不知道这是否有效,但在默认的webkit(chrome/safari)上,您可以设置属性
ondragstart=“return false;”“
来禁用默认的拖动行为。请检查此项
$('a').live('click', function (event) {
event.preventDefault();
window.location = $(this).attr("href");
});
我知道你说你已经试过了,但是你可能遇到了一个特殊性问题。你可以试试这样的
* {
-webkit-touch-callout: none !important;
}
希望这有帮助
如果这不能解决您的问题,请尝试在加载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程序员,但是你得到了这样的想法:)要用Sanooj的解决方案解决你的问题,你是否尝试过在他建议的代码中调用你自己的函数?例如:
$('a').live('click', function(event)
{
if($(this).hasClass('categoryList'))
categoryListSpecificFunction();
event.preventDefault();
window.location = $(this).attr("href");
});
目前我无法用Web应用程序测试这一点,但它在正常浏览器中对我有效,即它可以防止正常行为,但也允许我根据类调用特定函数。你的想法不起作用。我也试过ondragend,但也没用。我希望你是在为某家公司开发一款严格的内部应用程序,而不是试图破坏一些随机网络用户的浏览器功能。它是一款内部应用程序。现在,如果有两个窗口打开,它将无法正常工作,如果在我们的应用程序中打开一个窗口,而在Safari中打开另一个窗口,这将令人困惑。我们也许有一天会解决这个问题,但这不是当务之急。我不知道有人故意在我们的应用程序上做这个拖动动作。你的解决方案修复了问题,但导致了一个新问题。对于某些链接,我有一个单击处理程序来替换默认的点击行为,在尝试解决方案后,这些链接上的单击处理程序停止工作。将$('a')替换为$('.classname a'),其中“classname”将是该类。我认为这解决了您的问题,或者请返回。您指的是什么容器?链接在应用程序中的不同位置。@mikez302 Sanooj,只需将类放在您想要这种行为的标记上;然后在Jquery中使用它作为选择器。我尝试了你的答案,但它没有做任何事情。我尝试了你链接到的解决方案,它与Sanooj解决该问题的方案存在相同的问题。我会在有机会时尝试,但我想知道超时是否会使应用程序感觉缓慢。另外,如果用户按住手指超过一秒钟会怎么样?更改超时时间怎么样?