如果在keyup上添加char,则不会触发输入中的Google Chrome更改事件

Iva*_*nić 7 jquery google-chrome javascript-events keyup

$('input#not-gonna-work').bind({
    keyup: function(){
        console.log('Typed a key');
        $(this).val($(this).val() + '.');// try with any other char
    },
    change: function(){
       console.log('I\'m a changed input');
    }
});
Run Code Online (Sandbox Code Playgroud)

我在这个简化的jsfiddle示例中暂存了这个bug .与此错误相关的问题是我有一个正在构建的财务应用程序,如果输入数据发生更改,我需要显示"保存更改"按钮.因为我需要立即插入千位分隔符keyup(如果需要),这个错误真的让我烦恼并破坏了这个功能.

要重现它,请转到jsfiddle示例,在第一次输入中打开chrome类型的任何东西,keyup事件将被正确触发,而不是使用制表符或在其外部单击的非焦点输入,并且change不会触发事件.对其他输入执行相同操作change并将被触发.

我在Firefox中对它进行了测试,它按预期工作.

我正在使用的Chromium版本是14.0.835.202(Developer Build 103287 Linux)Ubuntu 11.10

尝试直接从Chrome网站新安装的Google Chrome 15.0.874.106.

我可以在change事件中插入分隔符,但由于用户将输入许多7位以上的数字,因此在键入时插入分隔符会更好.

Eds*_*ina 8

我在IE9中尝试过,它与Chrome有相同的行为.

我不认为这是一个错误.

在HTML元素上使用.val(value)将重置" 手动更改 "标志,因此不会发生更改事件(因为用户在val()操作之后不会手动更改任何内容).

  • 相关文档的+1(即使它是不同的浏览器) (4认同)
  • 是.http://msdn.microsoft.com/en-us/library/ie/ms536912(v=vs.85).aspx (2认同)
  • 阅读:"当以编程方式更改选定对象的选定选项时,onchange事件不会触发." (2认同)

Mat*_*ins 6

这看起来像是一个有效的Chrome错误.我的猜测是,onChange由于用户上次关注输入,更改值会重置Chrome依赖的任何内容来触发事件.我建议使用一个适用于所有浏览器的解决方法(不幸的是).

我在这里用这样的例子更新了你的代码.这个想法是当输入获得焦点时存储原始值,然后在输入模糊时将原始值与更新值进行比较.如果它是不同的值,则执行与更改回调相同的逻辑.