javascript - 将选项从 <select> 移动到 <select multiple> - 选项选择属性被破坏?

标签 javascript html drop-down-menu prototypejs dom-manipulation

我正在尝试为 Prototype 编写一个插件,其中用户单击下拉列表并将其替换为多选元素。我快完成了。一切都很顺利,直到用户选择他们想要显示的内容并将表单提交到同一页面。我使用 PHP 来使用 selected 标签的 <option> 属性来保留用户选择的内容。所以我的插件在那之后运行并将选项复制到多选,这就是问题所在。假设用户选择了 3 个项目,在多选的 html 代码中,所有 3 个项目都将具有 selected 属性,但只有最后一个会突出显示,并且在此时重新提交表单时,它实际上只提交突出显示的表单。 Here is a demo. 对此的任何帮助都会很棒。谢谢。

HTML

<select id="test1">
    <option>Option 1</option>
    <option selected="selected">Option 2</option>
    <option selected="selected">Option 3</option>
</select>

<select id="test2" multiple="multiple">
</select>​

JavaScript

$('test1').childElements().each(function(option){
    $('test2').insert(option);
});

最佳答案

由于第一个下拉列表不是多重选择,并且只能有一个选定项,因此 DOM 将被规范化,只有其中一个选项的 selected 属性设置为 正确

似乎当您复制它们时,该属性仍然存在,因此您必须读取它并相应地设置 selected 属性。

从未使用过 Prototype,但我想出了这样的东西:

$('test1').childElements().each(function(option){
    $('test2').insert(option);
    option.selected = $(option).readAttribute('selected');
});

jsFiddle - 仅在 Chrome 中测试

关于javascript - 将选项从 <select> 移动到 <select multiple> - 选项选择属性被破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12983592/

相关文章:

javascript - 关于通过导出导出的 javascript 类方法调用的输入

html - Bootstrap 嵌入响应不适用于 css 列数?

javascript - addEventListener 不能附加到哪些 html 元素?

javascript - 使用 javascript 进行表单验证

javascript - 重新声明局部变量

Javascript 提示方法在确实定义时未定义

javascript - 从没有重复的 Javascript 数组创建 HTML 下拉列表

javascript - 使用 HTML/JavaScript 在网页中嵌入画面 View

java - 提交表单后如何在下拉框中保留选定的值?

javascript - 如何使用 RxJS 控制多个 ajax 调用的压力