如何始终使用 IE 和 FF 让 jQuery 以编程方式在此选择列表中的项目?

Posted

技术标签:

【中文标题】如何始终使用 IE 和 FF 让 jQuery 以编程方式在此选择列表中的项目?【英文标题】:How can I get jQuery to programmatically items in this select list using IE and FF consistently? 【发布时间】:2014-03-18 13:03:06 【问题描述】:

我有一些 jQuery 代码可以在选择列表中选择一个选项。第一次选择一个项目时一切正常,但是第二次通过 IE 和 FF 不会清除所选项目。 Chrome 始终有效。

I have created a JSFiddle 带有我所看到的演示。我已经尝试将$("testUpdate option:selected")$("testUpdate > option:selected") 作为选择器,每个都只在第一次工作。我尝试将多个标签更改为多个per this documentation。

这是 html 和相关的失败 jQuery。我一直在使用 jQuery 1.9.1,但在 JSFiddle 上我看到新版本的结果相同。

//HTML
<select id="testUpdate" name="testUpdateName" multiple="multiple" size="5">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
</select>

//jQuery that fails the 2nd pass
$("#testUpdate option:selected").each(function () 
    //This is not executed
    $(this).removeAttr('selected');
);

//Alternate selector to force all options to always be checked
//HTML is correct after this, but visually the list is not selected
//I would also prefer not to do this because the actual list will be hundreds of items
$("#testUpdate option").each(function () 
   $(this).removeAttr('selected');
);

【问题讨论】:

【参考方案1】:

selected 值不会添加到 DOM 元素中,因此不是选项的属性。你应该使用$.prop():

$("#testUpdate option[value='" + this.getCurrentSelectionValue() + "']").prop('selected', 'selected');

Fiddle

【讨论】:

$.prop() 不会更新实际的 DOM;它只会改变元素的外观。如果您查看任何调试器中的 HTML 呈现,您将不会在选项中看到 selected 属性。如果您还想更新 DOM,则需要同时使用 $.attr()$.prop() 啊,我现在看到了这个问题的不同之处。 prop vs attr

以上是关于如何始终使用 IE 和 FF 让 jQuery 以编程方式在此选择列表中的项目?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery iframe 在 chrome 中加载,但不在 FF 和 IE 中

JQuery $(this).text().length 仅适用于 IE,不适用于 Chrome、IE 或 FF [重复]

jQuery .on() 方法在 Chrome 中不起作用(但在 IE 和 FF 中起作用)

IE和FF中的Jquery动画scrollLeft错误

JQuery hide()/show() 在 FF/IE 但不是 Chrome

为啥我的 jquery 表单验证不适用于 IE7?它适用于 FF、Opera、Safari 等