3

我有一个文本框

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

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

$('.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);

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

我在这里这里看过两个类似的问题,但找不到答案。

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

3 回答 3

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);
});
于 2012-10-25T22:51:56.573 回答
2

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

关键: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();
});
于 2014-05-30T17:39:45.437 回答
0

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

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

自 2013 年 5 月 2 日以来,该问题似乎已公开。

于 2014-01-10T11:18:25.557 回答