2009-07-17 14 views
7

Safari móvil admite un atributo en elementos de entrada llamado autocapitalize [documented here], que cuando se establece en 'off' detendrá el iPhone capitalizando la entrada de texto en ese campo, que es útil para campos de correo electrónico o url.¿Se puede autocapitalizar desactivar con javascript en el safari móvil?

<input type="text" class="email" autocapitalize="off" /> 

Pero este atributo no es válido en HTML 5 (u otra especificación por lo que sé) por lo que su inclusión en el html producirá una página HTML no válido, lo que me gustaría hacer es ser capaz de añadir este atributo a campos particulares onLoad con javascript con algo como esto:

$(document).ready(function(){ 
    jQuery('input.email, input.url').attr('autocapitalize', 'off'); 
}); 

que añade el atributo correcto en Firefox y Safari de escritorio, pero no parece hacer nada en Safari móvil, cualquier idea por qué?

+4

Es mucho mejor especificarlo en el HTML y sufrir una advertencia inofensiva que hacerlo en Javascript sin ningún beneficio real. Has reemplazado algo simple, obvio y rápido, que funciona incluso sin secuencias de comandos, con algo innecesariamente complicado. –

+2

@Glenn: no es exactamente una advertencia inofensiva. Usted (y cualquier otra persona que mantenga el código) tiene que recordar que esta advertencia de validación específica no importa. Algo molesto –

+3

@Paul: el propósito de los validadores es asegurarse de que conoce cuándo utiliza funciones no estándar, para que pueda tomar una decisión informada en lugar de utilizarlas sin saberlo. No están ahí para evitar que los uses. –

Respuesta

8

Esto debería arreglarse en iPhone OS 3.0. ¿En qué versión de iPhone OS estás probando esto?

Email: <input id="email" type="text"><br> 
URL: <input id="url" type="text"><br> 
<script> 
//document.getElementById("email").autocapitalize = 'off'; 
//document.getElementById("url").autocapitalize = 'on'; 
document.getElementById("email").setAttribute('autocapitalize', 'off'); 
document.getElementById("url").setAttribute('autocapitalize', 'on'); 
alert(document.body.innerHTML); 
</script> 
+0

Sí, en iPhone 3.0, este código funciona muy bien, pero el equivalente no lo hace, gracias mucho –

+0

No hagas esto. Es completamente inútil y solo ofusca la página. –

+0

¿Pero cómo desactivar la corrección automática y rápido "."? – Dmitry

1

Si es una característica útil, solo tendrá que elegir entre la validación estricta y la experiencia del usuario. Personalmente, escogería UX cualquier día.

0

Así que no pude conseguir jQuery para hacerlo pero JavaScript simple y llano, como sugirió ddkilzer obras, así que armar esta función para aplicar el autocapitalize = 'off' opción para todas las entradas con una clase específica:

$(document).ready(function(){ 
    // disable autocapitalize on .url, .email fields 
    unautocapitalize('url'); 
    unautocapitalize('email'); 
}); 

function unautocapitalize(cssClass){ 
    var elems = document.getElementsByClassName(cssClass); 
    for (var j = 0; j < elems.length; j++){ 
    elems[j].setAttribute('autocapitalize', 'off'); 
    } 
} 
8

Nota al margen. Puede mejorar aún más la experiencia del usuario en iOS al especificar el tipo de entrada que será "correo electrónico" para que aparezca automáticamente el teclado "correo electrónico" (caracteres ligeramente mejores para escribir un correo electrónico).

<input type="email" class="email" autocapitalize="off" /> 

Here is some documentation sobre cómo los tipos de entrada pueden controlar el teclado de iOS.

3

Es igual de inválido si lo agrega mediante script o si lo agrega en el marcado. Es solo que el validador no puede notarlo si lo agrega a través de un script.

Simplemente póngalo en el marcado y coloque un comentario al lado, como <!-- the "autocapitalize" attribute is an Apple proprietary extension for the iPhone to change its IME behaviour -->, de esta forma las personas que miran el código en el validador sabrán qué sucede.

Cuestiones relacionadas