未检测到输入值更改

Input value change not detected

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/

您也需要触发 change,因为默认情况下以编程方式设置的值不会触发任何事件。

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

除此之外,您需要先声明 updateTotal 函数,然后才能在事件侦听器创建中使用它。

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.

更改值后始终可以调用函数:

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'); 
}

当然你也必须更改此代码,以在一个函数中执行所有操作:

$('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');
});