Jquery: 当输入值被另一个函数改变时,.on('input')不触发

3
这里是代码:

$("input[type='text']").on('input', function() { ...stuff here... });  //first function

$('input[type="text"]').click(function() {  //second function
  $('#keyboard').show();
  $('#keyboard .letter').click(function() {
    var currentValue = $('input[type="text"]').val();
    alert(currentValue);
    $('input[type="text"]').val( currentValue + $(this).text() );
  });
});

简单来说,当我在这个文本输入框中输入时,会触发顶部的函数。在第二个函数中,我让键盘出现,并根据用户的点击更改输入框的值。然而,当第二个函数通过第一种方式改变输入框的值时,第一个函数不会触发。有什么想法吗?非常感谢。
1个回答

14
$("input[type='text']").trigger('input');

把它放到你的第二个函数中。仅使用JavaScript设置文本框的值将不会触发输入事件,因此您的输入事件处理程序将不会被激活。在这种情况下,您需要手动触发该事件处理程序。

注意:您不应该使用输入事件处理程序。请参阅此链接并查看可怕的浏览器兼容性。https://developer.mozilla.org/en-US/docs/DOM/window.oninput 。您可能最好改用change事件。


同意。这应该调用更改事件而不是输入。 - iAmClownShoe
2
我甚至不知道有一个 oninput 事件! - gen_Eric
我正在为Chrome制作打包应用程序,因此我只关心webkit。.on('input')在那里可以工作。虽然我已经将其更改为.change(),但它仍无法正常工作。不知道为什么。感谢您的答案。 - preahkumpii
使用JavaScript更改输入元素的值,例如使用.val(),不会触发.change()事件。文档:https://api.jquery.com/change/ - Mr.code892
它在IE 10和11中触发事件。但不适用于Edge。(旧版本不确定)。 - cmartin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接