Как я могу обрабатывать onchange для <input type="number" id="n" value="5" step=".5" />
? Я не могу сделать keyup
или keydown
, потому что пользователь может просто использовать стрелки для изменения значения. Я хотел бы обрабатывать его всякий раз, когда он изменяется, а не только на размытие, которое, по-моему, имеет событие .change()
. Любые идеи?
Onchange для типа ввода = "число"
Ответ 1
Используйте мышь и клавиатуру
$(":input").bind('keyup mouseup', function () {
alert("changed");
});
Ответ 2
Событие oninput
(.bind('input', fn)
) охватывает любые изменения от нажатий клавиш до щелчков стрелок и вставки клавиатуры/мыши, но не поддерживается в IE <9.
jQuery(function($) {
$('#mirror').text($('#alice').val());
$('#alice').on('input', function() {
$('#mirror').text($('#alice').val());
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="alice" type="number" step="any" value="99">
<p id="mirror"></p>
Ответ 3
$(":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());
});
Это немного гетто, но таким образом вы можете использовать событие "click" для захвата события, которое выполняется, когда вы используете мышь для увеличения/уменьшения с помощью маленьких стрелок на входе. Вы можете увидеть, как я построил небольшую ручную процедуру проверки изменений, которая гарантирует, что ваша логика не будет срабатывать, если значение фактически не изменится (чтобы предотвратить ложные срабатывания от простых щелчков в поле).
Ответ 4
Чтобы определить, нажата ли мышь или клавиша, вы также можете написать:
$(document).on('keyup mouseup', '#your-id', function() {
console.log('changed');
});
Ответ 5
$(':input').bind('click keyup', function(){
// do stuff
});
Ответ 6
Может быть лучшее решение, но это то, что пришло в голову:
var value = $("#yourInput").val();
$("#yourInput").on('keyup change click', function () {
if(this.value !== value) {
value = this.value;
//Do stuff
}
});
Здесь рабочий пример.
Он просто привязывает обработчик событий к событиям keyup
, change
и click
. Он проверяет, изменилось ли значение, и если да, сохраняет текущее значение, чтобы он мог снова проверить его в следующий раз. Для проверки события click
требуется проверка.
Ответ 7
$("input[type='number']").bind("focus", function() {
var value = $(this).val();
$(this).bind("blur", function() {
if(value != $(this).val()) {
alert("Value changed");
}
$(this).unbind("blur");
});
});
ИЛИ
$("input[type='number']").bind("input", function() {
alert("Value changed");
});
Ответ 8
<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/
Я использовал скрытый тип ввода как контейнер предыдущего значение, которое потребуется для сравнения при следующем изменении.
Ответ 9
Поскольку $("input[type='number']")
не работает в IE, мы должны использовать имя класса или id, например $('.input_quantity')
.
И не используйте метод .bind()
. Метод .on()
является предпочтительным методом прикрепления обработчиков событий к документу.
Итак, моя версия:
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>
Ответ 10
У меня была такая же проблема, и я решил использовать этот код
HTML
<span id="current"></span><br>
<input type="number" id="n" value="5" step=".5" />
Вы можете добавить только 3 первые строки, остальные части являются необязательными.
$('#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();
});
Пример здесь: http://jsfiddle.net/XezmB/1303/