我已经对此进行了大量的研究并发现了一堆报告的问题和解决方案,但普遍的共识似乎是IE6中的所有更改问题都在jQuery 1.4.2中得到修复。
我遇到的问题是jQuery 1.4.2中没有触发更改事件,但它在jQuery 1.3.2中成功触发。这是在IE6中。
我即将为此提交一个错误,但为了我的理智,我想首先在这里发布,看看是否有一些我丢失的愚蠢。我不明白为什么这样做......
<HTML>
<HEAD>
<TITLE>jQuery 1.4.2 Problem </TITLE>
<script src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script>
$(document).ready( function() {
$("#firstBox").change(function() {
alert("CHANGE");
});
// ONLOAD of document autofocus into the first element...
$("form").find(":input:visible:first").focus()
});
</script>
</HEAD>
<BODY>
<form>
<select id="firstBox">
<option value="" selected="selected">--</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
<br><br>
<input size="10" id="secondBox">
</form>
</BODY>
</HTML>
够简单吧?在页面上加载,给出第一个元素焦点。第一个元素的更改,警告。
如果您使用鼠标,它会按预期工作。页面加载,焦点在下拉列表中,您更改选项,即可获得警报。
问题在于您是否使用键盘。页面加载,焦点在下拉列表中,按下向下箭头。选项更改。关闭该字段,没有警报。奇怪的。为了使它更奇怪,如果你回到字段并再次更改它(全部使用键盘),更改事件将在此时标签之后触发。
有什么想法吗?
答案 0 :(得分:6)
我决定应用此修复程序并且有效:
$(function() {
$("select").keyup(function () {
$(this).triggerHandler("change")
});
});
原因是我们的应用程序已经使用IE6一段时间了,并且用户用于选择立即触发更改(字段隐藏/显示)的框。这就完成了。
感谢您的建议
答案 1 :(得分:1)
在第二次更改输入值之前,我遇到了以下代码无效的问题。
$("#General_Value").change(function () {
$(this).removeClass("parsedValue");
});
我不确定为什么,但我认为其他一些代码(.Net MVC2客户端验证脚本)正在干扰并阻止事件链。
我决定测试普通的旧javascript和它的工作原理!
var value = document.getElementById("General_Value");
value.onchange = function () {
$(this).removeClass("parsedValue");
};
我不喜欢混合jQuery代码和纯javascript,但这是我让它工作的唯一方式。
希望它可以帮助别人!
答案 2 :(得分:0)
请参阅以下帖子
http://bugs.jquery.com/ticket/8083
http://msdn.microsoft.com/en-us/library/aa158563(v=office.10).aspx
答案 3 :(得分:0)
我的表单上有数百个字段,onchange
没有第一次触发。
我根据MACCA1的回复做了以下训练:
$(".txt").keyup(function () {
if (!document.getElementById($(this).attr('id')).onchange) {
document.getElementById($(this).attr('id')).onchange = ch;
}
});
function ch() {
if (!isDirty) {
isDirty = true;
isButCli = false;
}
}