Javascript 从dropbox中选择多个项目&;让它们显示在文本框中
我想在下拉框中添加所选项目,并将其放入文本框中。 我现在可以只选择一个项目并将其放入文本框: Html代码:Javascript 从dropbox中选择多个项目&;让它们显示在文本框中,javascript,html,drop-down-menu,Javascript,Html,Drop Down Menu,我想在下拉框中添加所选项目,并将其放入文本框中。 我现在可以只选择一个项目并将其放入文本框: Html代码: <select name="ncontacts" id = "contacts" multiple="yes" onclick="ChooseContact(this)"> </select> 但是当我选择两个项目时,只有第一个项目写在文本框中。 那么,您知道如何修复它,让它们都显示在文本框中吗?一种可能的(基本)解决方案如下: function Choo
<select name="ncontacts" id = "contacts" multiple="yes" onclick="ChooseContact(this)"> </select>
但是当我选择两个项目时,只有第一个项目写在文本框中。
那么,您知道如何修复它,让它们都显示在文本框中吗?一种可能的(基本)解决方案如下:
function ChooseContacts(selectElem) {
var txtBox = document.getElementById ("friendName");
txtBox.value = '';
for (var i=0; i<selectElem.options.length; i++) {
if (selectElem.options[i].selected) {
txtBox.value += selectElem.options[i].value;
}
}
}
功能选择触点(selectElem){
var txtBox=document.getElementById(“friendName”);
txtBox.value='';
对于(var i=0;i另一种可能的解决方案是:
function ChooseContact(list) {
var selected = [];
Array.prototype.forEach.call(list.options, function(option) {
if( option.selected ) {
selected.push(option.value);
}
});
document.getElementById('friends').value = selected.join(', ');
}
编辑:对于记录-
Array.prototype
的执行速度略快于[]
。但它们做的事情是一样的:)性能损失并没有那么大(我在代码中使用了[]
。但我不妨向您展示一种稍微快一点、更详细的方式).请您进一步解释您的问题好吗?forEach不适用于节点列表…这就是为什么它不适用于您。此外,您应该缓存选项的长度,而不是在每次迭代时计算它们。(var i=0,l=fromElem.options.length;i
@rlemon谢谢。缓存始终是首选的吗?在测试时是否没有对此进行优化?没有每次迭代都会重新检查数组长度。如果更改数组的值(删除或添加)这会把你搞砸。如果你不这样做,会有轻微的性能损失(如果你的循环太大,会有更大的损失……这是不应该的)@rlemon好的,谢谢。我似乎记得语言能够确定它是一个循环不变量,因为我没有修改我正在迭代的内容,因此我认为它可以为我做到这一点。document.getElementById(“friendName”)
应存储在局部变量中,您无需从DOM中选择它两次。此外,应缓存选项的长度。并且您已创建了一个新的globabl变量…i
-应为(var i=0
@rlemon:PHP测试是昨天进行的,orourkek赢了。这里的问题和答案仅仅与给出的奖励无关,更多的是某个特定的人给出了答案,这就是为什么会有奖励。以防万一。但我很感激这个问题也能从中受益。@hakre仍然需要一个错误的答案更新。这个问题仍在集体讨论中,有人可能会认为这是解决问题的方法。@rlemon:当然,如前所述,这是一个好处。谢谢你的评论,只是不想因为赏金而给人留下错误的印象,仅此而已。
function ChooseContact(list) {
var selected = [];
Array.prototype.forEach.call(list.options, function(option) {
if( option.selected ) {
selected.push(option.value);
}
});
document.getElementById('friends').value = selected.join(', ');
}
function chooseContact(fromElem, appendToElem, separator){
separator = separator|| " ";
var result = [];
[].forEach.call(fromElem.options, functon(option){
if(option.checked){
result.push(option.value);
}
});
appendToElem.value = result.join(separator);
}