在Firefox中工作的JQuery效果;不是铬/即

时间:2009-07-25 16:03:06

标签: javascript jquery firefox

这个问题令我感到惊讶,因为它在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选项' - '选项'标签是有缺陷的。在将我的处理程序更改为“更改”之后,我能够进行调试和调试,直到我删除了选项标记 - 现在一切似乎都能正常工作。

谢谢,
迈克尔

3 个答案:

答案 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)

如果你在回调函数中发出警告,它会显示吗?