7

我有这个代码

var opt = $("select option:first");
opt.remove();

$("button").on("click", function() {
    $("select").prepend(opt).val(1);
});

这在某些浏览器中运行良好。但是,当然,IE 不是其中之一。在 IE 中,组合以两个选项结束,但文本为空白(没有选定的选项)。我认为这是因为该选项仍未加载到 DOM 中。我假设因为我可以使用此代码轻松解决此问题:

var opt = $("select option:first");
opt.remove();

$("button").on("click", function() {
    $("select").prepend(opt);
    setTimeout(function() {
        $("select").val(1);
    }, 1);
});

但是,我更喜欢更好的东西。有任何想法吗?

注意:我不是在寻找选择器的性能或类似的东西。发布的代码只是一个简化的示例,而不是我的真实脚本。

4

3 回答 3

3

这似乎适用于所有浏览器,但我不知道为什么您的原始代码在 IE 中失败。

var opt = $("select option:first");
opt.detach();

$("button").on("click", function() {
    $("select").prepend(opt).prop("selectedIndex", 0);
});

http://jsfiddle.net/tEUxg/5/

于 2012-12-11T14:31:59.997 回答
2

IE 使用队列系统进行 DOM 操作。使用dequeue()演示

var opt = $("select option:first");
opt.remove();

$("button").on("click", function() {
    $("select").prepend(opt).dequeue().val(1)
});
于 2012-12-11T14:50:43.680 回答
1

这很愚蠢,但是基于您考虑使用的原始解决方案的另一个解决方案是:

http://jsfiddle.net/N2UF4/1/

var opt = $("select option:first");
opt.remove();

$("button").on("click", function() {
    $("select").prepend(opt).delay(1).val(1);
});

仍然不确定为什么这是必要的(或dequeue来自其他答案),但它似乎也“解决”了问题。

于 2012-12-11T15:10:16.987 回答