2013-05-07 13 views
7

Appena imbattuto in qualcosa di strano in jQuery, mentre scrivevo un codice di convalida - Ho un campo "numero" html5;jQuery val si rifiuta di restituire un input non numerico da un campo numerico (Sotto Chrome)

<input type="number" class="required numeric" /> 

Il mio script esaminerà quindi tutti i campi della pagina controllando le classi e convalidando secondo necessità. Ho notato stranamente che se inserisco una "X" in uno dei miei campi numerici ottengo un errore "Si prega di inserire un valore in questo campo" invece di un errore "questo dovrebbe essere un numero". Dopo un po 'di grattacapi e un sacco di debugging ho buttato giù un jsFiddle per dimostrare la mia teoria- appare se inserisci un carattere in un campo numerico, quindi prova a fare un .val() da jquery non restituirà nulla, come se il il campo era vuoto (mi sono imbattuto in questo in Chrome, non sono sicuro che funzioni così su tutti i browser);

http://jsfiddle.net/shawson/SE46L/3/

Ecco il fiddle- immettere alcuni numeri, poi alcune lettere per vedere la pazzia. Qualcuno sa se questo è di progettazione, e se è così ... perché?

+1

Lavori in Firefox, Chrome deve essere specifica, e sto cercando di indovinare Safari troppo in quanto rende il "numero" attributo lo stesso. –

+0

Quanto fastidioso, sì, ho appena provato IE10 e funziona perfettamente! – Shawson

+0

Questo non è un problema jQuery - l'elemento stesso sta restituendo una stringa vuota per l'input non numerico. – Alnitak

risposta

9

Questo non è un problema jQuery. Otterrete lo stesso risultato se utilizzate il valore element.value nativo (ad esempio con getElementByID ('qualcosa'). Valore). È curioso di sapere come Chrome gestisce il tipo di input = numero e puoi scegliere di aggirare il problema usando type = text e la proprietà pattern.

Vedere this older question per ulteriori informazioni.

+0

Sì, buon grido- Li ho appena spostati in " testo "campi ora. – Shawson

+4

Questo ha lo sfortunato downsie che A) le frecce su e giù per inserire facilmente i piccoli numeri interi scompare e B) sui display mobili (tablet, smartphone) la tastiera non mostrerà automaticamente i numeri ma la tastiera abc completa invece. – user1884155

+0

il "quirk" è la specifica: https://www.w3.org/TR/html5/forms.html#number-state-(type=number): "Se il valore dell'elemento non è una variabile valida- numero di punto, quindi impostalo sulla stringa vuota ". Se si restituisce una stringa vuota e si desidera il valore non valido: modificare temporaneamente il tipo di input in "testo", recuperare nuovamente il valore, convertirlo nuovamente in type = "number" –

1

Came attraverso lo stesso problema in Chrome, non darà un valore su type = number quando non sono numerici. Il lavoro che ho svolto è stato semplicemente impostare il valore sul valore di se stesso. In questo modo non ti permetterà di inserire valori non numerici in primo luogo. È un hack ma funziona.

esempio:

$('body').find('input[type="number"]').each(function(k,v) { 

    $(this).on('keyup blur', function() { 
     $(this).val($(this).val()); 
    }); 

}); 
+1

In realtà si è rinunciato a tipi di numeri per il tempo medio come Firefox ha problemi a perdere l'attenzione sulla casella di input. – user3594630

+0

Con questa soluzione, l'utente non può digitare continuamente all'inizio del numero mentre sposta costantemente il cursore alla fine. – Pang

Problemi correlati