2012-04-19 64 views
8

En safari de dispositivos moblie, como iphone o ipad, <a href="#" onclick="return false"> no evita el comportamiento predeterminado, la página todavía se redirigía a '#', ¿por qué ...? Al igual que éstos código html:En el safari de dispositivos móviles, <a href="#" onclick="return false"> no funciona, ¿por qué?

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

Cuando haga clic en Safari dispositivos moblie, que se remonta a la parte superior de la página ...

+0

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

+0

¿verificaste cómo funcionan las cosas en un navegador de escritorio? Supongo que tiene algo que ver con los eventos touch vs. mouse. –

+0

En lugar de "onclick" puede intentar "onkeyup", "onmouseup" o "onkeypress" – Tobi

Respuesta

0

Por qué no? Creo que debe llamar a una función y no solo devolver el resultado falso ...

<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

He editado la pregunta, ignora el código js antes. Solo html, pero todavía no funciona ... – skyworm

+1

El atributo 'onclick' espera código JavaScript en lugar de una URL. Por lo tanto, 'javascript:' es simplemente redundante (aunque al menos no arrojará un error de sintaxis dado que es un código válido). –

1

Parece ser complicado. Probé con este código:

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

Lo que sucede es que cuando actualice la página en el iPhone y toque por primera vez me sale:

  1. sobre
  2. abajo
  3. hasta
  4. clic
  5. de desplazamiento hacia arriba

Cada lado del grifo me sale:

  1. abajo
  2. hasta
  3. clic
  4. Sin de desplazamiento hacia arriba

divertido lo suficiente, esto sólo funciona, cuando el código contiene las alertas . Si no hay alertas dentro del código, el desplazamiento se produce cada vez que toco ....

Seguro que hay algo de magia con hrefs en el safari móvil, que puedes ver cuando sostienes el enlace (sin levantar el dedo): aparece una hoja de acción ("copia", "abrir", "abrir en ...", etc.) antes de se dispara uno de los eventos.

1

en realidad trató con

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

y funciona bien

0

En primer lugar, intente esto:

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

en JS:

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

segundo lugar (si el primer la variante no funcionará):

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

en JS:

function DummyFunction(){ 
    return false; 
} 

Por lo que yo recuerdo, uno de ellos variante resuelto el mismo problema, cuando lo tenía.

La primera variante es mucho mejor, lástima pues de no mezclar HTML y JavaScript

5

que tenía el mismo problema. Resulta que es un error en la versión iOS 5 de Safari. No ocurre en versiones más nuevas o más antiguas, ni en ningún otro navegador o plataforma.

me lo resolvió mediante la adición de preventDefault al controlador de eventos onclick, además de la return false existentes, así:

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

No es ideal, pero no resuelve el problema.

+0

En mi caso no fue necesario el = "..." solo el "onclick" sirvió para su propósito – MoshMage

2

Simplemente tuve el mismo problema con mis enlaces que no funcionaban en el iPhone de mi amigo. Eliminé el href="#" de la mía y los botones funcionan perfectamente bien, excepto que tengo mis botones configurados de forma un poco diferente a la suya con JavaScript.

La forma en que se han establecido como esto es

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


}) 

Entonces desencadenan los marcos que quiero aparecer con

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

No sé cómo se ha establecido la suya , pero eliminar el href="#" con esta configuración funcionó en el mío.

0

Básicamente, fui con una solución similar, pero respaldada un poco más con algunas comprobaciones condicionales ... esto está basado en jQuery y se utiliza para iniciar sesión en Sitefinity.

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

he encontrado que el uso de la event.preventDefault() causó una serie de cuestiones similares a empezar a ocurrir en algunas versiones de IE.

Cuestiones relacionadas