【发布时间】:2012-01-05 03:59:53
【问题描述】:
由于某种原因,这个函数在 Firefox 中做了一些奇怪的事情
function fadeOUT_sect(id) {
if ( $("div#"+id).css("display")!="none") {
$("div#"+id).fadeOut();
$("div#"+id).find("ul").each(function() {
var name = $(this).attr("id");
$(this).find("input").removeAttr("checked");
if ( $(this).find("select > option:first").val() != "-9" ) {
$(this).find("select > option:first").attr({
value:"-9",
selected:"selected"
}); // $.attr()
} // if select
// I've isolated the problem to this if-test
if ( !($(this).find('input[value="-9"]').val()) ) {
// ^ I think the problem is here.
$(this).find('input[type="text"]').val('');
$(this).append('<input name="'+name+'" type="radio" value="-9" checked="checked" />');
} // if
}); // $.each()
} // if
} // function
最初,出现问题的 HTML 如下所示:
<div id="2" style="display:none">
<ul id="state">
<li>What state do you live in?</li>
<li><select>
<option value="-9" selected="selected"></option>
<option value="AL">Alabama</option>
…
</select></li>
</ul>
在fadeIn() 之后,div#2 可见,第一个<option> 变为<option value=""></option>,当我单击下拉菜单时,我会看到所有选项。现在麻烦开始了:
当我选择一个选项时,下拉菜单消失,但条/气泡是空白的(我没有选择空白选项)。我再次单击下拉菜单,我的选项在列表中突出显示;我点击离开,栏/气泡再次空白。我第三次单击下拉菜单,选择空白选项,单击离开,单击返回,然后选择非空白选项,突然我可以在条形/气泡中看到文本。
问题仅发生在Mac和Windows上的Firefox(可能仅适用于Mac)中。在 Windows 或 Mac 中,以下任何一种都没有问题:Safari/Chrome、Opera、IE7+(IE6 根本无法显示页面)。
编辑我在多台计算机上的 Firefox、Safari/Chrome 和 Opera 中对此进行了测试,得到了相同的结果(因此没有缓存/数据问题)。
EDIT 2这是在 jsfiddle 中重现的问题:http://jsfiddle.net/JakobJingleheimer/EkDdB/3/
EDIT 3:我刚刚测试了 Firefox 版本 5 到 9,这个问题出现在 Firefox 8+ 中。在阅读 v8 的发行说明时,他们似乎开始对 javascript 使用“类型推断”(但我不知道这会如何影响任何事情,或者如果确实如此,如何绕过它)。
谢谢!
Resolution:在 html 中删除 selected="selected",并在 javascript/jQuery 中从 .attr({…}) 和 .removeAttr("selected") 中删除 selected:"selected"。
【问题讨论】:
-
拜托哦,请缓存您选择的元素!
var $div = $('#' + id); $div.css..., $div.fadeOut...,等。现在我看看能不能找到你的问题。 -
在 jsFiddle 中设置它,我会仔细看看。
-
上面的函数怎么调用?此外,它不会破坏它,但为什么你说 $("div#"+id) 而不是 $("#"+id)? (鉴于 id 是唯一的,“div”部分根本没有帮助。)
-
"2" 不是 html 元素的合法 ID。我不确定这是否是您的问题,但鉴于这是特定于浏览器的问题,似乎有可能。 stackoverflow.com/questions/70579/…
-
@jacob 这似乎对我在 Firefox 中工作得很好。你用的是什么版本?
标签: javascript jquery html function firefox