javascript 函数破坏下拉菜单,但仅在 Firefox 中

标签 javascript jquery html function firefox

由于某种原因,这个函数在 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 中对此进行了测试,并得到了相同的结果(因此没有缓存/数据问题)。

编辑2 这是 jsfiddle 中重现的问题:http://jsfiddle.net/JakobJingleheimer/EkDdB/3/

编辑 3:我刚刚测试了 Firefox 版本 5 至 9,此问题出现在 Firefox 8+ 中。在阅读 v8 的发行说明时,他们似乎开始对 javascript 使用“类型推断”(但我不知道这可能会如何影响任何事物,也不知道如果确实如此,如何解决它)。

谢谢!

<强> Resolution :删除selected="selected"在 html 中,并删除 selected:"selected"来自.attr({…}).removeAttr("selected")在 javascript/jQuery 中。

最佳答案

我可以在 Mac 版 Firefox 8.0.1 上重现该错误。

问题来 self 在下面注释掉的行。

function fadeIN_sect(id) {
    $("#" + id + ' > ul > input[value="9999"]').remove();
    //$("#" + id + " > ul > li > select > option:first").attr("value", "").removeAttr("selected");
    $("#" + id).fadeIn();
}

一旦我评论了该行,它就可以正常工作。您可以尝试分开线路并一次调试每个操作。

编辑:测试似乎指向removeAttr 调用。另外,如上面评论中所述,不要忘记缓存所有选择器。不断地选择它们是非常低效的。

关于javascript 函数破坏下拉菜单,但仅在 Firefox 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8737473/

相关文章:

javascript - 在可滚动容器中定位绝对下拉列表

html - 出现和消失页面底部的额外空间

javascript - 将 html 更改为数组中的下一项 - jquery

javascript - 将自己的 JavaScript 模块导入转换后的 TypeScript

javascript - 当子类化 Ruby 内置函数时会发生哪些类型的明显问题?

适用于智能手机的 jQuery Accordion

javascript - 导出的函数未定义

Javascript include() 不是一个函数

html - 使图像响应(使用浏览器调整大小)

javascript - Bootstrap : home page slider not working