2009-07-17 14 views
7

Mobile safari supporta un attributo su elementi di input denominato autocapitalize [documented here], che quando impostato su "off" interromperà l'iPhone inserendo il testo in ingresso in quel campo, utile per i campi url o email.Può autocapitalizzare essere disattivato con javascript in mobile safari?

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

Ma questo attributo non è valido per HTML 5 (o un altro spec per quanto ne so) in modo da includerla nel codice HTML produrrà una pagina html non valido, quello che vorrei fare è essere in grado di aggiungere questo attributo a particolari campi onLoad con javascript con qualcosa di simile:

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

che aggiunge l'attributo corretto in Firefox e Safari del desktop, ma non sembra fare nulla in Safari mobile, Tutte le idee perché?

+4

È molto meglio specificarlo nell'HTML e avvertire un avviso innocuo rispetto a farlo in Javascript senza alcun beneficio effettivo. Hai sostituito qualcosa di semplice, ovvio e veloce, che funziona anche senza script, con qualcosa inutilmente complicato. –

+2

@Glenn: non è esattamente un avvertimento innocuo. Tu (e chiunque altro mantenga il codice) devi ricordare che questo avviso di convalida specifico non ha importanza. Tipo di fastidio. –

+3

@Paul: Lo scopo dei validatori è quello di assicurarsi di essere a conoscenza quando si utilizzano funzionalità non standard, quindi è possibile prendere una decisione istruita piuttosto che usarla inconsapevolmente. Non sono lì per impedirti di usarli. –

risposta

8

Questo dovrebbe essere risolto in iPhone OS 3.0. Quale versione di iPhone OS stai provando?

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ì in iPhone 3.0, questo codice funziona alla grande, ma l'equivalente jQuery no, grazie molto –

+0

Non farlo. È completamente inutile e offusca solo la pagina. –

+0

Ma come disabilitare la correzione automatica e veloce "."? – Dmitry

1

Se si tratta di una funzionalità utile, è sufficiente scegliere tra la convalida rigorosa e l'esperienza utente. Personalmente, sceglierei UX ogni giorno.

0

Quindi non ho potuto ottenere jQuery per farlo, ma pianura vecchio javascript, come suggerito ddkilzer opere, così ho messo insieme questa funzione per applicare l'autocapitalize = 'off' opzione per tutti gli ingressi con una specifica classe:

$(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 a margine. Puoi migliorare ulteriormente l'esperienza utente su iOS specificando il tipo di input da "email" per far apparire automaticamente la tastiera "email" (caratteri leggermente migliori per digitare un'e-mail).

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

Here is some documentation su come tipi di input possono controllare la tastiera IOS.

3

Non è valido se lo aggiungi tramite script o se lo aggiungi nel markup. È solo che il validatore non è in grado di notarlo se lo aggiungi tramite script.

Basta inserirlo nel markup e mettere un commento accanto ad esso, come <!-- the "autocapitalize" attribute is an Apple proprietary extension for the iPhone to change its IME behaviour -->, in questo modo le persone che guardano il codice nel validatore sapranno cosa succede.

Problemi correlati