2012-04-19 12 views
8

W safari urządzeń moblie, jak iPhone lub iPad, <a href="#" onclick="return false"> nie przeszkadza w domyślnym zachowaniu, strona wciąż była przekierowywana na "#", dlaczego ...? jak te kod html:Na safari urządzeń mobilnych <a href="#" onclick="return false"> nie działa, dlaczego?

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

Kiedy kliknięcie w safari moblie devices', to idzie z powrotem do góry strony ...

+0

onclick = "javascript: return false;" ? – adali

+0

Czy sprawdziłeś, jak działają rzeczy w przeglądarce na komputerze? Zakładam, że ma to coś wspólnego ze zdarzeniami dotykowymi a myszami. –

+0

Zamiast "onclick" możesz spróbować "onkeyup", "onmouseup" lub "onkeypress" – Tobi

Odpowiedz

0

Dlaczego nie? Myślę, że musisz wywołać funkcję i nie tylko zwracać fałsz ...

<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; 
} 
+0

Edytowałem pytanie, proszę zignorować kod js wcześniej. Po prostu html, ale nadal nie działa ... – skyworm

+1

Atrybut 'onclick' oczekuje kodu JavaScript zamiast adresu URL. Tak więc 'javascript:' jest po prostu nadmiarowy (chociaż przynajmniej nie spowoduje błędu składni, ponieważ jest to poprawny kod). –

1

Wydaje się być podchwytliwa. Testowałem z tym kodem:

<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> 

Co się dzieje, że kiedy odśwież stronę na iPhone i dotknij po raz pierwszy pojawia się:

  1. nad
  2. dół
  3. się
  4. kliknij
  5. przewiń w górę

Każdy następny tap uzyskać:

  1. dół
  2. się
  3. kliknięcia
  4. nr przewijania w górę

Funny mało, to działa tylko wtedy, gdy kod zawiera ostrzeżenia . Jeśli nie ma żadnych alertów w kodzie, przewijanie odbywa się za każdym razem, gdy klikam ...

Na pewno jest trochę magii z hrefami w mobilnym safari, które można zobaczyć, gdy trzymasz link (bez podnoszenia palca): pojawia się arkusz czynności ("kopia", "otwórz", "otwórz w ..." itp.) przed jedno z wydarzeń zostanie wyrzucone.

1

I rzeczywiście próbował z

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

i działa dobrze

0

Po pierwsze, spróbuj tego:

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

w JS:

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

drugie (jeśli pierwszy wariant nie zadziała):

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

w JS:

function DummyFunction(){ 
    return false; 
} 

O ile pamiętam, jeden z tych wariantów rozwiązania tego samego problemu, kiedy miałem go.

Pierwszy wariant jest o wiele lepiej, poniewaz nie mieszać HTML i JavaScript

5

miałem ten sam problem. Okazuje się, że jest to błąd w wersji Safari Safari na iOS 5. Nie występuje w nowszych lub starszych wersjach, ani w żadnej innej przeglądarce lub platformie.

postanowiłem go dodając preventDefault do obsługi zdarzenia onclick, w uzupełnieniu do istniejącego return false, tak:

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

Nie idealne, ale to nie rozwiązuje problemu.

+0

W moim przypadku nie było potrzeby, aby = "..." po prostu "onclick" spełnił swój cel – MoshMage

2

Po prostu miałem ten sam problem z linkami, które nie działają bezpośrednio na iPhonie mojego przyjaciela. Usunąłem href="#" z kopalni, a przyciski działają perfekcyjnie, z tym wyjątkiem, że moje przyciski ustawiono trochę inaczej niż ty przy pomocy JavaScript.

sposób mam to skonfigurować to tak

$(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'); 


}) 

Potem wywołać klatki chcę pop-up z

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

nie wiem jak masz swoje skonfigurować , ale usunięcie href="#" z tą konfiguracją zadziałało na moje.

0

W zasadzie poszedłem z podobnym rozwiązaniem, ale zarchiwizowałem je nieco, sprawdzając warunkowo ... to jest oparte na jQuery i używane do logowania w Sitefinity.

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

znalazłem, że przy użyciu event.preventDefault() spowodowane do podobnych problemów, aby rozpocząć występujące w niektórych wersjach IE.

Powiązane problemy