2012-04-19 7 views
8

In Safari von Moblie-Geräten, wie iPhone oder iPad, <a href="#" onclick="return false"> verhindert nicht Standardverhalten, die Seite wurde immer noch auf '#' umgeleitet, warum ...? wie dieser HTML-Code:Auf der Safari von Mobilgeräten funktioniert <a href="#" onclick="return false"> nicht, warum?

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

Wenn Klick in Safari moblie Geräte, es zurück zum Seitenanfang geht ...

+0

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

+0

Haben Sie überprüft, wie die Dinge auf einem Desktop-Browser funktionieren? Ich nehme an, dass es etwas mit Touch vs. Mouse Events zu tun hat. –

+0

Anstelle von "onclick" können Sie versuchen, "onkeyup", "onmouseup" oder "onkeypress" – Tobi

Antwort

0

Warum nicht? Ich denke, Sie müssen eine Funktion aufrufen und nicht nur falsch zurückgeben ...

<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

Ich habe die Frage bearbeitet, bitte ignoriere den js-Code vorher. Just html, funktioniert aber immer noch nicht ... – skyworm

+1

Das 'onclick'-Attribut erwartet JavaScript-Code statt einer URL. Daher ist 'javascript:' einfach redundant (obwohl es zumindest keinen Syntaxfehler verursacht, da es ein gültiger Code ist). –

1

Scheint schwierig zu sein. Ich mit diesem Code getestet:

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

Was passiert, ist, dass wenn ich die Seite auf dem iPhone zu aktualisieren, und tippen Sie zum ersten Mal bekomme ich:

  1. über
  2. unten
  3. up
  4. klicken
  5. scroll up
012 Ich

Jeder nächste Hahn erhalten:

  1. unten
  2. up
  3. klicken
  4. Keine scroll up

Komischerweise funktioniert dies nur, wenn der Code die Warnungen enthält . Wenn keine Warnungen innerhalb des Codes, Scrollen passiert jedes Mal, wenn ich tappe ....

Sicherlich gibt es etwas Magie mit hrefs in mobilen Safari, die Sie sehen können, wenn Sie den Link halten (ohne den Finger zu heben): An Aktionsblatt erscheint ("kopieren", "öffnen", "öffnen in ..." usw.) vor wird eines der Ereignisse ausgelöst.

1

ich tatsächlich versucht, mit

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

und es funktioniert gut

0

Erstens, versuchen Sie dies:

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

in js:

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

Zweitens (wenn die erste Variante wird nicht funktionieren):

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

in js:

function DummyFunction(){ 
    return false; 
} 

Soweit ich mich erinnere, eine dieser Variante löste das gleiche Problem, wenn ich es hatte.

Die erste Variante ist viel besser, becouse Sie

5

Ich hatte das gleiche Problem nicht HTML und JavaScript mischen. Es stellt sich heraus, dass es sich um einen Fehler in der iOS 5-Version von Safari handelt. Nicht in neueren oder älteren Versionen oder anderen Browsern oder Plattformen.

ich gelöst es von preventDefault zum Onclick-Ereignishandler, zusätzlich zu den bestehenden return false Zugabe, etwa so:

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

Nicht ideal, aber es hat das Problem zu lösen.

+0

In meinem Fall gab es keine Notwendigkeit für das = "..." nur der "onclick" erfüllte seinen Zweck – MoshMage

2

Ich hatte nur ein bisschen das gleiche Problem mit meinen Links funktioniert nicht direkt auf dem iPhone meines Freundes. Ich habe die href="#" von mir gelöscht und die Buttons funktionieren einwandfrei, nur habe ich meine Buttons etwas anders eingerichtet als du mit dem JavaScript.

So wie ich es eingerichtet haben, wie ist diese

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


}) 

Dann habe ich die Frames auslösen ich mit

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

Ich weiß nicht, um Pop-up möchten, wie Sie Ihr eingerichtet haben , aber das Entfernen der href="#" mit dieser Einrichtung funktionierte auf meiner.

0

Grundsätzlich ging ich mit einer ähnlichen Lösung, aber ein bisschen mehr mit einigen bedingten Überprüfung gesichert ... das ist jQuery basiert und für die Anmeldung in Sitefinity verwendet.

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

habe ich feststellen, dass die Event.preventDefault mit() ein ähnlichen Probleme verursachten in einigen Versionen von IE beginnen auftreten.

Verwandte Themen