2012-05-14 10 views
14

Tengo un conjunto de Div que actúan como botones. Estos botones tienen una función simple de jquery click() que funciona en todos los navegadores excepto en iOS.Cómo hacer que mi función de 'clic' funcione con iOS

Por ejemplo:

<div class="button">click me</div> 

y

$('.button').click(function(){ 

    alert('hi'); 

}); 

No estoy seguro de por qué esto no funciona en iOS - claramente no existe un 'clic' en IOS.

Lamentablemente, no tengo un dispositivo de iphone para probarlo yo mismo, pero recibo muchas quejas de mis clientes que quieren hacer clic en las cosas y no ocurre nada.

¿Cuál es la clave para que esto funcione?

+2

no sé sobre ios, pero el código no funcionará para los usuarios de navegadores de escritorio o bien, si estos usuarios utilizan un teclado, pero no hay ningún dispositivo señalador (es decir, ningún ratón) - que hacen algunos usuarios por elección, y otros usuarios lo hacen debido a alguna discapacidad física. Debe usar los elementos '' (aún puede darles el estilo para que se vean como desee).Y si tiene clientes de pago que esperan compatibilidad con iPhone, entonces necesita obtener un iPhone para probarlo: puede cancelarlo como un gasto comercial ... – nnnnnn

+0

Demasiados detalles que faltan en su pregunta. Si está en un Mac, ejecute el emulador de iOS con Safari en modo desarrollador. Por cierto, ¿cuándo vinculas el manejador de clics al botón.? ¿Esto sucede después de que se active '$ .ready'? –

+0

'click' funciona bien en iOS, su problema está en otra parte. Y nnnnnn es correcto, también deberías mirar usando '

Respuesta

31

Click ": significa Cuando un mousedown y eventos mouseup se producen en el mismo elemento o un elemento se activa mediante el teclado

de Jquery Bug, hay trabajo alrededor, basta con añadir "cursor: pointer" a CSS del elemento y el evento click. . funcionará como se esperaba e incluso se puede ver esto Jquery click on Ios ayuda

+0

Sorprendentemente, ¡funcionó! – willdanceforfun

+10

Bueno, Android no tiene problemas para usar su iniciativa y hacer que el "clic" sea tratado como táctil. iOS es el nuevo IE –

1

puede utilizar este:

$('button').bind("touchstart", function(){ 
    alert('hi'); 
}); 

Otra solución es establecer el cursor del elemento al puntero y funciona con jQuery en vivo y haga clic en evento. Establecerlo en CSS.

+10

usando 'touchstart' podría desencadenar accidentalmente un clic cuando el usuario intente desplazarse – brettish

4

En realidad, la respuesta aceptada no funcionó para mí. Intenté usar "cursor: puntero", onclick = "" e incluso convertir el elemento en una etiqueta de anclaje.

Lo que hice para que funcione es vincular el evento touchstart en lugar del evento click. Para hacer que funcione en todas las plataformas que tuve que a una suplantación ua feo como este:

var ua = navigator.userAgent, 
event = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click"; 

jQuery("body").on(event, '.clickable_element', function(e) { 
    // do something here 
}); 
+1

¡Totalmente funciona para mí! Sin embargo, lo reescribí sin el 'jQuery (" cuerpo ")', y usé un nombre de var un poco menos confuso en lugar de 'evento', pero supongo que el último fue solo para aclararlo. – cptstarling

+1

¡Eso me sirvió de algo, gracias! –

2

Basado en Marek's answer esta es mi opinión sobre ella (que es un poco limpiado):

var ua = navigator.userAgent, 
pickclick = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click"; 

$('.clickable_element').on(pickclick, function(e) { 
    // do something here 
}); 

Hay todavía queda mucho trabajo por delante para la industria cuando se trata de normas ...

EDIT:

no funcionó en Y teléfonos robóticos. Adoptó un enfoque más rígida:

if (document.documentElement.clientWidth > 1025) { pickclick = 'click' } 
if (document.documentElement.clientWidth < 1025) { pickclick = 'touchstart' } 

$('.clickable_element').on(pickclick, function(e) { 
    // do something here 
}); 
1

También basado en Marek's answer, que se adapta el evento al dispositivo para disparar una función, aquí es un código que obligan a disparar un clic en los dispositivos iOS, donde hay primero una touchstart evento:

var UA = navigator.userAgent, 
iOS = !!(UA.match(/iPad|iPhone/i)); 

if (iOS) { 
    $(document).on('touchstart', function (e) { 
     e.target.click(); 
    }); 
} 
Cuestiones relacionadas