jQuery on change/input 在通过 JS 更新值时不起作用
jQuery on change/input not working when updating value via JS
我注意到 $('#firstId')
的事件在 Javascript 本身完成更改时没有触发。
为什么会这样?
还有办法继续触发事件吗?
举个例子:
$('#firstId').on('change input paste', function(){
console.log("this is the input event being fired");
});
$('#randomButton').on('click', function(){
$('#firstId').val(Math.floor(Math.random()*2147483647 )+1);
console.log("randomButton being fired");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span for="firstId">number: </span>
<input type="number" id="firstId"/>
<p>Or</p>
<button id="randomButton">Get a random number</button><br>
这是因为上面通过处理程序附加的所有事件都是由用户操作触发的,而不是通过代码触发的。您可以在这里使用 .trigger()
或 .change()
来触发事件:
$('#firstId').val(Math.floor(Math.random()*2147483647 )+1).change();
或
$('#firstId').val(Math.floor(Math.random()*2147483647 )+1).trigger('change');
我注意到 $('#firstId')
的事件在 Javascript 本身完成更改时没有触发。
为什么会这样?
还有办法继续触发事件吗?
举个例子:
$('#firstId').on('change input paste', function(){
console.log("this is the input event being fired");
});
$('#randomButton').on('click', function(){
$('#firstId').val(Math.floor(Math.random()*2147483647 )+1);
console.log("randomButton being fired");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span for="firstId">number: </span>
<input type="number" id="firstId"/>
<p>Or</p>
<button id="randomButton">Get a random number</button><br>
这是因为上面通过处理程序附加的所有事件都是由用户操作触发的,而不是通过代码触发的。您可以在这里使用 .trigger()
或 .change()
来触发事件:
$('#firstId').val(Math.floor(Math.random()*2147483647 )+1).change();
或
$('#firstId').val(Math.floor(Math.random()*2147483647 )+1).trigger('change');