2009-07-25 30 views
0

这个问题令我感到惊讶,因为它在Chrome中也不起作用。铬!!
总之,我有3个选择框,A,B,C。在页面加载时,B和C是隐藏的。 (这在所有浏览器中都很好)。目前,我有一个事件处理程序附加到方框A中的特定值,所以如果单击某个值,则B显示自身填充了根据A的结果。对于C,同样的事情:如果单击B中的值,C会自行显示。
但是,这种“显示”效果只发生在Firefox - Chrome和IE浏览器混淆。在Firefox中工作的JQuery效果;不是铬/即

有什么建议吗?提示? 下面是一些代码:

$(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选项” - 在“选项”标签是越野车之一。在将我的处理程序更改为“更改”之后,我能够进行调试和调试,直到我删除了选项标记 - 现在一切似乎都奏效。

感谢,
迈克尔

+1

ajax查询是否到达服务器?在回调()开始时alert()会工作吗?和$(“#B”)。show()之后? – Javier 2009-07-25 16:18:43

+0

它没有(对于Chrome/IE) – Dirk 2009-07-25 16:23:14

+0

听起来就像代码中的某处出现了流浪的逗号问题。要验证以下正则表达式模式的外观:/,\ s * [\] \}]/ – 2009-07-26 05:15:09

回答

4

实际的问题是在下面一行:

//... 
$.getJSON(stuff, callback(data)); 
//... 

您还没有传递回调函数,你实际上是在执行函数并传递undefined,因为它不返回任何东西。

你应该传递给函数的唯一参考:

//... 
$.getJSON(stuff, callback); 
//... 

或者代替使用匿名函数:

//... 
$.getJSON(stuff, function(data){ 
    $("#B").show(); 
}); 
//... 

编辑:我还没有发现有关click处理程序您正在尝试分配,我建议您在select元素上使用change事件,以确保已选择一个选项:

$(document).ready(function() { 
    $("#B,#C").hide(); 

    $('select#A').change(function() { 
    $.getJSON(stuff, function(data) { $("#B").show();}); 
    }); 
}); 
2

我认为你可能在回调函数的末尾有多余的右括号。

UPDATE:

好像火狐可以选择的选项,但不是IE的单击事件。我不知道铬,但它可能是同样的问题。您可以使用change事件来跟踪选择中的更改,而不是在选项上收听点击事件。

如果更改事件与您尝试执行的操作相对应,则可以执行以下操作。

$(document).ready(function() { 
$("#B").hide(); 
$("#C").hide(); 
$('select#A').each(function() { 
    $(this).change(function() { 
      $.getJSON(stuff, callback(data)); 
     }); 

}); 

}); function callback(data){

$("#B").show(); 

};

请注意,我正在收听Select中的更改事件。 我希望这有助于!

+0

对不起;错字------ – Dirk 2009-07-25 16:10:14

0

如果你在你的回调函数中放置了一个警报,它会显示出来吗?

相关问题