我有一个文本框
<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);
但我不能评论这一行,因为我需要在每个按键上应用格式化。
更新: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');
答案 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日开始。