【问题标题】:Textbox change event not firing in chrome文本框更改事件未在 chrome 中触发
【发布时间】:2012-10-25 22:12:12
【问题描述】:

我有一个文本框

<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 功能可以正常工作,并且不会触发 change 事件。

如果我在 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');

【问题讨论】:

  • 您是否正在寻找每次按键时的更改事件?仅当字段未聚焦时才会触发更改。
  • 不,我喜欢在每次按键时调用“formatfn”,在 onchnage 事件上调用“myJsFunction”。
  • 您没有发布所有代码,因为您引用的是newVal,它没有在任何地方定义,并且会在任何浏览器中导致ReferenceError
  • 另外,您设置.val(newVal),但返回newval 是否有原因 - 请注意大小写差异?
  • Esailija : 我已经为 newVal 添加了更多信息。

标签: jquery google-chrome textbox onchange


【解决方案1】:

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

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

【讨论】:

  • 感谢您提供此解决方法,但我仍在寻找我的代码在 IE 和 Firefox 中有效但在 chrome 中无效的原因。
  • 我真的不知道? webkit 处理更改事件的方式有一些不同,复选框就是一个很好的例子,但我从来没有遇到过我能记住的文本框的问题!
【解决方案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 事件失败。另一个例子是在 blur 上显式触发 change 事件。

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

【讨论】:

    【解决方案3】:

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

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

    该问题似乎自 2013 年 5 月 2 日起开放。

    【讨论】:

      猜你喜欢
      • 2010-11-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多