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

时间:2012-10-25 22:12:12

标签: jquery google-chrome textbox onchange

我有一个文本框

<input name="tx1" size="10" type="text" id="tx1" class="sample dynamic format" maxlength="10" />

文本框更改和键盘事件绑定到两个不同的函数。

$('.sample.dynamic').change(myJsFunction);


$('.format').keyup(function (e) {
        formatfn(this, e);

    });

这是我的格式:

function formatfn(sValue, e) {

//Do some formatting

$(sValue).val(newVal);

return newVal;

}

这两个事件在IE和Firefox中运行良好但在chrome中只有keyup函数正常工作且更改事件未被触发。

如果我在 formatfn 中评论以下行,那么也会在chrome中更改事件开始触发。

//$(sValue).val(newVal);

但我不能评论这一行,因为我需要在每个按键上应用格式化。

我看了两个类似的问题herehere,但找不到答案。

更新: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');

3 个答案:

答案 0 :(得分:4)

你总是可以使用模糊滚动你自己的变化功能:

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

答案 1 :(得分:2)

同意这与Chromium开发站点上与onchange事件相关的现有报告错误一致,这些错误在以编程方式更改值时未触发。这些已被确认为r36和r37(金丝雀)中的回归/错误。建议在Google Chrome浏览器菜单项中查看您的版本。

keyup:https://code.google.com/p/chromium/issues/detail?id=92492

更改:https://code.google.com/p/chromium/issues/detail?id=378871

一个简单的解决方法可能是让您的处理程序执行模糊而不是更改,这样可以避免onchange事件失败,如前面的答案中所述。另一个例子是明确触发模糊的变化事件。

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

答案 2 :(得分:0)

实际上,Google Chrome上存在一个错误,如果“keyup”事件更改了某些内容,则会导致“更改”事件无法触发:

https://code.google.com/p/chromium/issues/detail?id=92492

这个问题似乎从2013年5月2日开始。