在移动设备的旅行中,<a href="#" onclick="return false"> doesn&#39;t work, why?</a>

时间:2012-04-19 07:52:53

标签: javascript ipad safari onclick preventdefault

在移动设备的游戏中,如iphone或ipad,<a href="#" onclick="return false">不会阻止默认行为,页面仍然被重定向到'#',为什么......? 喜欢这些HTML代码:

<div style="height:1000px; width:100px"></div>
<br />    
<a href="#" onclick="return false">click me</a>

当点击moblie devices的safari时,它会回到页面顶部......

7 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。事实证明,它是iOS 5版Safari中的一个错误。在较新或较旧版本或任何其他浏览器或平台中不会发生。

我通过向onclick事件处理程序添加preventDefault以及现有return false来解决此问题,如下所示:

<a href="#" onclick="event.preventDefault(); return false;">click me</a>

不理想,但确实解决了这个问题。

答案 1 :(得分:2)

我只是有点同样的问题,我的链接无法在我朋友的iPhone上正常工作。我删除了我的href="#"并且按钮工作得很好,除了我的按钮设置与使用JavaScript的按钮略有不同。

我设置它的方式就像这样

$(document).ready(function () {
    var buttons=$('#button01,#button02,#button03,#button04,#button05');

buttons.click(function(){
        $(this).removeClass('off-class').addClass('on-class');
        buttons.not(this).removeClass('on-class').addClass('off-class');


})

然后我触发想要弹出的帧

if ($('#button01').hasClass('on-class')){
                $('#frame01').removeClass('hidden');
$('#frame02,#frame03,#frame04,#frame05').addClass('hidden');
                }else{
                    $('#frame01').addClass('hidden');

我不知道你是如何设置的,但是使用此设置删除href="#"对我有效。

答案 2 :(得分:1)

似乎很棘手。我测试了这段代码:

<body>
Hallo
<br>
<div style="height:2000px; width:100px"></div>
<br />    
<a href="#" onclick="alert('click');return false;" 
            onmousedown="alert('down');return false;"
            onmouseup="alert('up');return false;"
            onmouseover="alert('over');return false;"
            onmouseout="alert('out');return false;">

click me</a>
</body>

当我在iPhone上刷新页面并第一次点击时,会发生什么:

  1. 向下
  2. 点击
  3. 向上滚动
  4. 我得到的每一次点击:

    1. 向下
    2. 点击
    3. 向上滚动
    4. 有趣的是,只有当代码包含警报时,这才有效。如果代码中没有警报,每次点击时都会向上滚动....

      当然,你可以看到,当你拿着链接(不抬起手指)时,你可以看到移动野生动物园中的hrefs有一些魔力:出现一个动作表(“复制”,“打开”,“打开... 之前其中一个事件被触发。

答案 3 :(得分:1)

我实际上尝试了

<a href="javascript:void(0)" onclick="return false">click me</a>

并且效果很好

答案 4 :(得分:0)

为什么不呢?我想,你必须调用一个函数,而不仅仅是返回false ...

<a href="#" onclick="javascript:myFunction()" id="test_a">click me</a>

function myFunction() {
  var elem = document.getElementById('test_a');
  if (elem.addEventListener) {
      elem.addEventListener('click', function() {
          alert('clicked');
      }, false);
  } else {
      elem.attachEvent('onclick', function() {
          alert('clicked');
      });
  }

  return false;
}

答案 5 :(得分:0)

首先,试试这个:

<a href="#" id='test'>click me</a>

在js:

$('a#test').click(function(event){
    event.preventDefault();
});

其次(如果第一个变体不起作用):

<a href="#" id='test' onclick='return DummyFunction();'>click me</a>

在js:

function DummyFunction(){
    return false;
}

据我所知,当我拥有它时,其中一个变体解决了同样的问题。

第一个变体要好得多,因为你不混用html和javascript

答案 6 :(得分:0)

基本上,我使用了类似的解决方案,但通过一些条件检查支持了更多...这是基于jQuery并用于在Sitefinity中登录。

  if ($.browser.safari) {
    $('.sfSubmitBtn').attr('onclick', 'event.preventDefault(); return false;');
  }

我确实发现使用event.preventDefault()导致在某些版本的IE中开始出现类似的问题。