这个问题令我感到惊讶,因为它在Chrome中也不起作用。 Chrome浏览器!
无论如何,我有3个选择框,A,B,C。在页面加载时,B和C被隐藏。 (这在所有浏览器中都很好)。目前,我有一个事件处理程序附加到框A中的特定值,因此,如果单击一个值,B显示自己填充根据A的结果。对于C:如果单击B中的值,C将显示自身。
但是,这种“显示”效果只发生在firefox中 - Chrome和IE混淆了。
有什么建议吗?提示? 这是一些代码:
$(document).ready(function() {
$("#B").hide();
$("#C").hide();
$('select#A option').each(function() {
$(this).click(function() {
$.getJSON(stuff, callback(data));
});
});
});
function callback(data) {
// alert("hi"); // This isn't working for Chrome / IE! so the callback isn't called
$("#B").show(); // This isn't working for Chrome / IE!
};
编辑:结果,'选择#A选项' - '选项'标签是有缺陷的。在将我的处理程序更改为“更改”之后,我能够进行调试和调试,直到我删除了选项标记 - 现在一切似乎都能正常工作。
谢谢,
迈克尔
答案 0 :(得分:4)
实际问题如下:
//...
$.getJSON(stuff, callback(data));
//...
你没有传递回调函数,你实际上是在执行函数并传递undefined
,因为它没有返回任何内容。
您应该只传递函数的引用:
//...
$.getJSON(stuff, callback);
//...
或者使用匿名函数:
//...
$.getJSON(stuff, function(data){
$("#B").show();
});
//...
编辑:我没有注意到您尝试分配的点击处理程序,我建议您在select元素上使用change事件,以确保选项已被选中:
$(document).ready(function() {
$("#B,#C").hide();
$('select#A').change(function() {
$.getJSON(stuff, function(data) { $("#B").show();});
});
});
答案 1 :(得分:2)
我认为你可能在回调函数的末尾有额外的结束括号。
<强>更新强>
似乎firefox可以选择该选项的click事件而不是IE。我不知道铬,但它可能是同样的问题。您可以使用change事件跟踪选择中的更改,而不是在选项上收听点击事件。
如果更改事件与您尝试执行的操作相符,则可以执行以下操作。
$(document).ready(function() {
$("#B").hide();
$("#C").hide();
$('select#A').each(function() {
$(this).change(function() {
$.getJSON(stuff, callback(data));
});
});
}); 函数回调(数据){
$("#B").show();
};
注意我是如何在Select本身上收听更改事件的。 我希望这有帮助!
答案 2 :(得分:0)
如果你在回调函数中发出警告,它会显示吗?