2016-08-10 2 views
1
var input = $('input[type="number"]', this); 
$('.inc').on('click', function(){ 
    input.val(parseFloat(input.val()) + parseFloat(0.5)); 
}); 

... правильно увеличивает значение ввода. Тем не менее, я не могу получить change событие с:Изменение входного значения не обнаружено

$('input[type="number"]').on('propertychange change keyup input paste', function(){ 
    console.log('change'); 
}); 

Что я здесь делаю неправильно?

https://jsfiddle.net/cf5vhb2c/

+0

Быстрый поворот - это явно вызвать функцию после приращения. Тем не менее, будет оценен фрагмент. –

+1

Согласно [mdn] (https://developer.mozilla.org/en-US/docs/Web/Events/change), «... В отличие от входного события событие« change »не обязательно запускается для каждого измените значение элемента. ". Возможно, эти события не увольняются, потому что вы меняете значение динамически, а не в результате взаимодействия с пользователем. – Lix

+0

Обновлено описание с быстрой скрипкой. – 3zzy

ответ

3

Вам нужно вызвать change тоже, так как программно установить значения не будет вызывать какое-либо событие по умолчанию.

var input = $('input[type="number"]', this); 
$('.inc').on('click', function(){ 
    input.val(parseFloat(input.val()) + parseFloat(0.5)).trigger("change"); 
}); 

Кроме этого вам необходимо объявить updateTotal функцию Befor использовать его в создании прослушивателя событий.

var updateTotal = function() { 
    console.log('change'); 
} 
$('.hours input[type="number"]').on('change', updateTotal); 

Или объявить указанную функцию:

$('.hours input[type="number"]').on('change', updateTotal); 
function updateTotal() { 
    console.log('change'); 
} 

Или использовать анонимную функцию непосредственно:

$('.hours input[type="number"]').on('change', function() { 
    console.log('change'); 
}); 

Working example.

+0

Просто попробовал, не работает. Я должен делать что-то глупое. Вот скрипка: https://jsfiddle.net/cf5vhb2c/ – 3zzy

+0

Отредактировал свой ответ со своей скрипкой @ 3zzy! – eisbehr

+0

Это сработало, похоже, я использовал функцию до ее объявления? – 3zzy

-1

Вы всегда можете вызвать функцию после изменения параметров Значение:

var input = $('input[type="number"]', this); 
$('.inc').on('click', function(){ 
    input.val(parseFloat(input.val()) + parseFloat(0.5)); 
    do_something(); 
}); 

function do_something() { 
    console.log('change'); 
} 

Ofcourse вы должны изменить этот код тоже, чтобы выполнить все в одной функции:

$('input[type="number"]').on('propertychange change keyup input paste', function(){ 
    do_something(); 
}); 

Другое дело, что приходит на мой взгляд, заключается в следующем, не проверял, хотя:

$('.inc').on('click', function(){ 
    input.val(parseFloat(input.val()) + parseFloat(0.5)).trigger('change'); 
}); 
Смежные вопросы