onChange事件未在Chrome中的文本框中触发

时间:2011-06-15 17:54:14

标签: javascript jquery google-chrome

我有以下代码绑定一些验证逻辑,当用户更新文本框的值时将触发这些逻辑。我希望//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'

4 个答案:

答案 0 :(得分:2)

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

Example with live showing it working against dynamic content.

Test it here

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

更新:如果将其更改为模糊时有效,则可能会覆盖之前的事件或功能。通过将其更改为模糊,无论覆盖什么都不再是因为它是 a different event

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

答案 1 :(得分:0)

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

我已尝试在FF和Chrome中使用代码 - http://jsfiddle.net/B3aRy/ - 它在两者中均有效。也许这可能是你代码中其他地方的问题?

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

尝试:

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

正如我所说的那样在'text'周围加上引号。值得一试。

或尝试:

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

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