【问题标题】:onChange event not firing on a textbox in ChromeonChange 事件未在 Chrome 中的文本框上触发
【发布时间】:2011-06-15 17:54:13
【问题描述】:

我有以下代码来绑定一些验证逻辑,以便在用户更新文本框的值时触发。我希望//Do some stuff here 代码将在任何文本框失去焦点时执行。

function RegisterHoursValidationHandlers() {
    $('.topic-frame-body input[type=text]').live('change', function () {
        //Do some stuff here
    });
}

这完全符合我在 IE、Firefox 和 Safari 中的预期。但是,该事件在 Chrome 中永远不会触发,我不知道为什么。

更新:我能够通过将'change' 更改为'blur' 来获得所需的效果。虽然这仍然不能解释为什么它不适合 'change'

【问题讨论】:

  • 如果在您将其更改为模糊时它可以工作,那么您可能覆盖了之前的事件或函数。通过将其更改为模糊,任何覆盖它的东西都不再会覆盖它,因为它是一个不同的事件。它们显然是不同的事件。

标签: javascript jquery google-chrome


【解决方案1】:

There's no known quirk about chrome。 (所有浏览器都支持更改事件)

Example with live showing it working against dynamic content.

Test it here:

这里有一条信息或假设使这个问题无法解决。

更新:如果将其更改为模糊时它可以工作,则可能是您正在覆盖以前的事件或函数。通过将其更改为模糊,任何覆盖它的东西都不会再覆盖它,因为它是 a different event

这也可以解释为什么您没有看到任何错误。 (请记住,我相信 jQuery 会将绑定到相同元素的事件链接起来,但 live() 是一种特殊情况 - 但事实可能表明它是函数,而不是事件绑定)

【讨论】:

    【解决方案2】:

    尝试使用 .delegate() 代替 http://api.jquery.com/delegate/

    我在 FF 和 Chrome 中都试过你的代码 - http://jsfiddle.net/B3aRy/ - 它在两者中都有效。那么,这可能是您代码中其他地方的问题?

    【讨论】:

    • 我已经尝试了 .delegate() 和 .change() 但都没有给我不同的结果。
    • 如果它是由其他地方的问题引起的,我不会完全感到惊讶,因为这是一个非常复杂的 UI。但如果是这样的话,我希望它至少不能在其他浏览器之一中工作。我没有从 Chrome 开发人员工具中收到任何错误,我通过 JSLint 运行了 javascript,但没有看到任何我没想到的东西。
    【解决方案3】:

    您使用的是什么版本的 Jquery?

    我自己看不到问题,但 .live 直到 jquery 1.4+ 才支持“更改”事件

    【讨论】:

    • 我们目前使用的是 jQuery 1.4.4
    • 这是一个有趣的问题。我会尝试更新版本的 jQuery 只是为了它。
    • 更新到jQuery 1.6.1 问题依旧存在。
    【解决方案4】:

    试试:

    function RegisterHoursValidationHandlers() {
        $(".topic-frame-body input[type='text']").live('change', function () {
            //Do some stuff here
        });
    }
    

    在我的“文本”周围加上引号。值得一试。

    或者试试:

    $(".topic-frame-body input:text").live();
    

    关键是,我认为问题在于您如何定位输入字段的细节,而不是方法。

    【讨论】:

    • 我尝试了你的两个建议,但没有运气。另外,考虑到这可能是字段选择器的问题,我在有问题的输入字段中添加了一个类,并直接针对该类,即。 $('.foobar'),但这也没有用。
    • 试试这个:$(".topic-frame-body > input[type='text']") 和其他方法,但是使用父子选择器?我真的认为它的目标是输入。
    • 要么,或者如果您在此函数上方有 js 代码,也将其发布给我们。您在 chrome 中使用 Web 开发人员工具栏吗?转到脚本选项卡,看看您是否收到任何 js 错误。
    • 页面上有额外的 js 代码,我正在使用开发人员工具,但它们没有显示任何错误。我还在控制台窗口中执行了选择器$('.topic-frame-body input[type=text]'),它返回了一个包含我希望看到的所有元素的列表。
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2015-08-09
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多