onChange事件不在Chrome中的文本框中触发
我有以下代码来绑定某些验证逻辑,以便在用户更新文本框的值时触发。我期望//Do some stuff here
代码将在任何绑定的文本框失去焦点时执行。onChange事件不在Chrome中的文本框中触发
function RegisterHoursValidationHandlers() {
$('.topic-frame-body input[type=text]').live('change', function() {
//Do some stuff here
});
}
这和我在IE,Firefox和Safari上的预期完全一样。但是,这个事件从来没有在Chrome中引发火焰,我不知道为什么。
更新:我能够通过将'change'
更改为'blur'
来获得所需的效果。虽然这仍然不能解释为什么它不与'change'
一起工作。
尝试使用.delegate(),而不是http://api.jquery.com/delegate/
我试过你的代码在这两个FF和铬 - http://jsfiddle.net/B3aRy/ - 它的工作在这两个。所以也许它是你的代码中的其他地方的问题?
There's no known quirk about chrome。 (change事件在所有浏览器都支持)
Example with live showing it working against dynamic content.
有一条信息或一个假设,这里正在进行的是使这种不可解。
UPDATE:如果它在您将其更改为模糊时起作用,则可能是您覆盖了以前的事件或功能。通过改变它变得模糊,无论是覆盖它不再会因为它是一个a different event。
这也解释了为什么你没有看到任何错误。 (请记住,我相信jQuery会链接绑定到相同元素的事件,但live()有点特殊 - 但这个事实可能指向它是函数,而不是事件绑定)
尝试:
function RegisterHoursValidationHandlers() {
$(".topic-frame-body input[type='text']").live('change', function() {
//Do some stuff here
});
}
与各地报价“文”为我有它。值得一试。
或者试试:
$(".topic-frame-body input:text").live();
问题的关键是,我认为这个问题是你如何针对输入字段,而不是在方法的细节。
我尝试了两条建议,但没有成功。另外,我认为这可能是字段选择器的一个问题,我向所讨论的输入字段添加了一个类,并直接针对该类,即。 $('。foobar'),但那也行不通。 – Hamman359 2011-06-15 18:34:31
试试这个:$(“。topic-frame-body> input [type ='text']”)和其他方式,但使用父级子选择器?我真的认为它是针对输入的。 – 2011-06-15 18:40:11
要么是这个,要么是你的js代码在这个函数之上,那也发布给我们。你在Chrome中使用web开发者工具栏吗?转到脚本标签,看看你是否得到任何js错误。 – 2011-06-15 18:41:00
如果它在您将其更改为模糊时起作用,则可能*您正在覆盖之前的事件或功能。通过改变它变得模糊,不管是否覆盖它,都不再会因为它是一个不同的事件。他们显然是不同的事件。 – cgp 2011-06-15 19:01:42