Come posso gestire un onchange per <input type="number" id="n" value="5" step=".5" />
? Non riesco a fare uno keyup
o keydown
, perché l'utente può semplicemente usare le frecce per cambiare il valore. Vorrei maneggiarlo ogni volta che cambia, non solo sulla sfocatura, che penso sia l'evento .change()
. Qualche idea?evento onchange per tipo di input = "numero"
risposta
Usa mouseup e keyup
$(":input").bind('keyup mouseup', function() {
alert("changed");
});
Questo avviserà anche se il valore non è cambiato (basta cliccare ovunque nell'ingresso). –
Sì, lo farà. Se questo è un problema, dovresti tenere traccia del valore nell'input in una variabile globale o in un elemento dati sull'input. Quando l'evento mouseup chiama la tua funzione, confronta quel valore con il valore corrente dell'input. Fai qualcosa solo se il valore è cambiato. – JohnColvin
Questo non funziona se il valore viene modificato scorrendo il mouse sopra l'elemento. –
$(":input").bind('keyup change click', function (e) {
if (! $(this).data("previousValue") ||
$(this).data("previousValue") != $(this).val()
)
{
console.log("changed");
$(this).data("previousValue", $(this).val());
}
});
$(":input").each(function() {
$(this).data("previousValue", $(this).val());
});
Questo è un po 'del ghetto, ma in questo modo è possibile utilizzare l'evento "click" per catturare l'evento che viene eseguito quando si utilizza il mouse per aumentare/diminuire tramite le piccole frecce sul l'input. Puoi vedere come ho costruito una piccola routine di "change check" manuale che assicura che la tua logica non si attivi a meno che il valore non sia effettivamente cambiato (per evitare falsi positivi da semplici clic sul campo).
Fare clic sui pulsanti freccia. Non sparerà 'change' (finché non scocca l'evento' blur'), e neanche "keyup". –
Ah, con "frecce" ho assunto frecce su/giù sulla tastiera. Fatto. –
@JamesAllardice Ho aggiornato la risposta per gestire quei piccoli widget. –
ci può essere una soluzione migliore, ma questo è quello che è venuto in mente:
var value = $("#yourInput").val();
$("#yourInput").on('keyup change click', function() {
if(this.value !== value) {
value = this.value;
//Do stuff
}
});
Ecco un working example.
Semplicemente associa un gestore di eventi agli eventi keyup
, change
e click
. Controlla se il valore è stato modificato o meno e, in tal caso, memorizza il valore corrente in modo che possa verificare nuovamente la volta successiva. Il controllo è necessario per gestire l'evento click
.
L'ingombro dell'ambito globale con una variabile denominata 'value' sta causando problemi. – AlienWebguy
Molto vero. Come la tua risposta, è solo un esempio. Penso che @JakeFeasel abbia probabilmente la soluzione più pulita. –
$(':input').bind('click keyup', function(){
// do stuff
});
Questo sarà ancora eseguito se il valore non è cambiato (basta cliccare in qualsiasi punto nel 'input'). –
Questo è vero, ma una volta catturato l'evento, può determinare se il valore è cambiato o meno. – AlienWebguy
Il oninput
evento (.bind('input', fn)
) si estende su eventuali modifiche da sequenze di tasti per freccia clic e tastiera/incolla il mouse, ma non è supportata in IE < 9.
$("input[type='number']").bind("focus", function() {
var value = $(this).val();
$(this).bind("blur", function() {
if(value != $(this).val()) {
alert("Value changed");
}
$(this).unbind("blur");
});
});
OR
$("input[type='number']").bind("input", function() {
alert("Value changed");
});
<input type="number" id="n" value="0" step=".5" />
<input type="hidden" id="v" value = "0"/>
<script>
$("#n").bind('keyup mouseup', function() {
var current = $("#n").val();
var prevData = $("#v").val();
if(current > prevData || current < prevData){
$("#v").val(current);
var newv = $("#v").val();
alert(newv);
}
});
</script>
http://jsfiddle.net/patrickrobles53/s10wLjL3/
ho usato un tipo di input nascosto di essere il contenitore del valore precedente che sarà necessario per il confronto sul prossimo cambiamento.
è possibile utilizzare solo l'attributo 'data-prev' per memorizzare il valore precedente. Non è necessario utilizzare input aggiuntivi –
per rilevare quando vengono premuti il mouse o il tasto, è possibile anche scrivere:
$(document).on('keyup mouseup', '#your-id', function() {
console.log('changed');
});
perché $ ("input [type = 'numero']") non funziona su IE, dovremmo usare un nome di classe o ID, ad esempio, $ ('') input_quantity
e non utilizzare .bind() metodo. Il .Il metodo() è il metodo preferito per il collegamento di gestori di eventi a un documento.
Quindi, la mia versione è:
HTML
<input type="number" value="5" step=".5" min="1" max="999" id="txt_quantity" name="txt_quantity" class="input_quantity">
jQuery
<script>
$(document).ready(function(){
$('.input_quantity').on('change keyup', function() {
console.log('nice');
});
});
</script>
Ho avuto lo stesso problema e ho risolto utilizzando questo codice
HTML
<span id="current"></span><br>
<input type="number" id="n" value="5" step=".5" />
È possibile aggiungere solo le prime 3 linee le altre parti è facoltativo.
$('#n').on('change paste', function() {
$("#current").html($(this).val())
});
// here when click on spinner to change value, call trigger change
$(".input-group-btn-vertical").click(function() {
$("#n").trigger("change");
});
// you can use this to block characters non numeric
$("#n").keydown(function (e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 || (e.keyCode === 65 && e.ctrlKey === true) || (e.keyCode >= 35 && e.keyCode <= 40)) {
return;
}
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
Esempio qui: http://jsfiddle.net/XezmB/1303/
- 1. Evento "onchange" di trigger
- 2. evento onChange con contenteditable
- 3. JavaFX TextArea Evento OnChange
- 4. evento onchange su window.location.href
- 5. Evento per SELECT onchange con tastiera
- 6. Evento di Onchange dopo il completamento automatico
- 7. Tipo di input per modulo HTML per numero intero
- 8. HTML5 Tipo di input "numero" in Firefox
- 9. Cattura evento di annullamento sul tipo di input = file
- 10. Chiamata AJAX su evento OnChange in MVC
- 11. Come espandere un evento onchange con JavaScript
- 12. Evento OnChange utilizzando React JS per il menu a discesa
- 13. evento "onchange" ritardato in IE? (ok con Firefox)
- 14. Numero di tipo di input HTML Mille separatori
- 15. l'evento onchange non viene attivato sul comando di tipo selenio
- 16. Crea tipo di input HTML5 = "numero" che accetta trattini
- 17. HTML5 Tipo di input = numero rimuove lo zero iniziale
- 18. Tipo di input HTML5 = numero e attributo segnaposto
- 19. Convalida numero intero per input
- 20. lunghezza massima non funzionante con tipo di input = "numero" ionico
- 21. Impossibile rimuovere le virgole dal valore numero tipo di input
- 22. Impedisci ingressi negativi nel tipo di input modulo = "numero"?
- 23. Come gestire l'evento onchange sul tipo di input = file in jQuery?
- 24. tipo Regexp per numero 0
- 25. chiamata javascript funzione onchange evento di elenco a discesa
- 26. evento onclick che non viene attivato dopo l'evento onchange
- 27. L'evento di input OnChange non viene attivato su jquery
- 28. Come limitare la lunghezza del carattere di input dell'utente del tipo di input HTML5 = "numero"?
- 29. PHP per Ajax utilizzando onchange
- 30. evento onchange non si attiva quando il valore viene modificato in onkeyup evento
ti rendi conto che tipo di input non è supportato da IE o Firefox? – AlienWebguy
Ora è supportato da Firefox – ElephantHunter