我有以下代码绑定一些验证逻辑,当用户更新文本框的值时将触发这些逻辑。我希望//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'
。
答案 0 :(得分:2)
There's no known quirk about chrome。 (所有浏览器都支持更改事件)
Example with live showing it working against dynamic content.
这里有一条信息或假设使这无法解决。
更新:如果将其更改为模糊时有效,则可能会覆盖之前的事件或功能。通过将其更改为模糊,无论覆盖什么都不再是因为它是 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();
关键是,我认为问题在于如何定位输入字段,而不是方法。