Jquery 文本框更改事件未在chrome中触发

Jquery 文本框更改事件未在chrome中触发,jquery,google-chrome,textbox,onchange,Jquery,Google Chrome,Textbox,Onchange,我有一个文本框 <input name="tx1" size="10" type="text" id="tx1" class="sample dynamic format" maxlength="10" /> 这是我的格式fn: function formatfn(sValue, e) { //Do some formatting $(sValue).val(newVal); return newVal; } 这两个事件在IE和firefox中都可以正常工作,但在chro

我有一个文本框

<input name="tx1" size="10" type="text" id="tx1" class="sample dynamic format" maxlength="10" />
这是我的格式fn:

function formatfn(sValue, e) {

//Do some formatting

$(sValue).val(newVal);

return newVal;

}
这两个事件在IE和firefox中都可以正常工作,但在chrome中,只有keyup功能可以工作,并且不会触发change事件

如果我在formatfn中注释下面的行,那么也可以在chrome中更改事件开始触发

//$(sValue).val(newVal);
但我不能评论这一行,因为我需要在每个按键上应用格式

我看了两个类似的问题,但没有找到答案

Update:Formatfn正在做各种格式化工作,但为了让您了解newval变量,我在这里添加了一些相关代码:

var newVal = $(sValue).val();

if (newVal != "")
        newVal = parseInt(RemoveCommas(newVal), 10).toString();

    var sRegExp = new RegExp('(-?[0-9]+)([0-9]{3})');

    while (sRegExp.test(newVal)) {
        newVal = newVal.replace(sRegExp, '$1,$2');

您可以始终使用模糊来滚动自己的更改功能:

$('.sample.dynamic').data('last','').on('blur', function() {
    var last = $(this).data('last');
    if (this.value!=''&&this.value!=last) myJsFunction();
    $(this).data('last', this.value);
});

实际上,Google Chrome上有一个bug,如果“keyup”事件更改了某些内容,则会导致“change”事件不触发:


该问题似乎自2013年5月2日起就一直存在。

同意这与Chromium dev网站上报告的与onchange事件相关的现有bug一致,当值以编程方式更改时,onchange事件不会触发。这些已被确认为r36和r37(金丝雀)中的回归/缺陷。建议在“关于Google Chrome”菜单项中检查您的版本

密钥更新:

更改:

一个简单的解决方法可能是让处理程序在blur上执行,而不是在change上执行,这避免了前面答案中提到的失败onchange事件。另一个例子是显式触发blur上的更改事件

$('.sample.dynamic').on("blur", function(e){ 
     $(this).change();
});

您是否在每个按键上寻找更改事件?更改仅在字段未聚焦时触发。否,我喜欢在每次按键时调用“formatfn”,在onchnage事件中调用“myJsFunction”。您没有发布所有代码,因为您引用的是
newVal
,它没有在任何地方定义,并且会在任何浏览器中导致引用错误。另外,您设置
.val(newVal)有什么原因吗
,但返回
newval
-注意大小写的区别吗?Esailija:我已经为newval添加了更多信息。感谢您的解决方案,但我仍在寻找为什么我的代码在IE和Firefox中有效,但在chrome中无效的原因。我真的不知道?webkit处理更改事件的方式有一些不同,复选框就是一个很好的例子,但我从来没有遇到过我能记住的文本框问题!
$('.sample.dynamic').on("blur", function(e){ 
     $(this).change();
});