per valuta, io suggerirei :
<div><label>Amount $
<input type="number" placeholder="0.00" required name="price" min="0" value="0" step="0.01" title="Currency" pattern="^\d+(?:\.\d{1,2})?$" onblur="
this.parentNode.parentNode.style.backgroundColor=/^\d+(?:\.\d{1,2})?$/.test(this.value)?'inherit':'red'
"></label></div>
Vedere http://jsfiddle.net/vx3axsk5/1/
Le proprietà HTML5 "step", "min" e "pattern" verranno convalidate quando il modulo è submit, non onblur. Non è necessario il step
se si dispone di un pattern
e non è necessario un pattern
se si dispone di un step
. Quindi potresti tornare a step="any"
con il mio codice poiché il pattern lo convaliderà comunque.
Se si desidera convalidare onblur, credo che dare all'utente un segnale visivo sia anche utile come colorare lo sfondo rosso. Se il browser dell'utente non supporta type="number"
, verrà eseguito il fallback su type="text"
. Se il browser dell'utente non supporta la convalida del modello HTML5, il mio snippet JavaScript non impedisce al modulo di inviarlo, ma fornisce un segnale visivo. Quindi, per le persone con scarso supporto HTML5 e persone che cercano di hackerare nel database con JavaScript disabilitato o creare richieste HTTP, è necessario comunque convalidarlo nuovamente sul server. Il punto con la convalida sul front-end è per una migliore esperienza utente. Quindi, se la maggior parte degli utenti ha una buona esperienza, è meglio fare affidamento sulle funzionalità HTML5 a condizione che il codice funzioni ancora e che sia possibile convalidare il back-end.
type = "numero" non ha il supporto del browser di larghezza. È meglio usare solo una casella di testo con qualche javascript per assicurarti di ottenere l'input desiderato. – www139
Sì, ma gli input ricadono in 'type =" text "' comunque, quindi cosa importa? – Ultimater