我有这个应用程序,让用户可以选择他的颜色首选项,并在他决定这样做时更改它们。该应用程序不需要在页面重新加载之间工作。我希望用户能够从下拉列表中删除特定的颜色首选项。我想使用indexOf和splice,但我一直在努力使用它。这是我现在所做的。麻烦在于Remove()。 JS Bin:http://jsbin.com/ANENaRid/2/
这是故障功能:
function Remove() {
var select = document.getElementById("selectColor");
for (var i = 0; i < colors.length; i--) {
var selectIndex = colors.indexOf(select.value);
if (selectIndex !== -1) {
colors.splice(i, 1);
}
return false;
}
}
答案 0 :(得分:2)
remove函数应如下所示,您必须从select中删除该选项(只有构造函数名称应为大写):
function remove() {
var select = document.getElementById("selectColor");
for (var i = 0; i < colors.length; i++) {
if (colors[i].name_prop == select.value) {
colors.splice(i, 1);
}
}
}
答案 1 :(得分:2)
function Remove() {
var select = document.getElementById("selectColor");
var selectIndex = colors.indexOf(select.value);
if (selectIndex !== -1) {
colors.splice(selectIndex , 1);
}
return false;
}
您应该只选择要删除的颜色,而不是遍历颜色数组。您获得该项目的索引并将其删除。无需迭代它。
答案 2 :(得分:0)
使用
for(var i = 0; i < colors.length; i++) {
//your code here
}
或
for(var i = colors.length-1; i >= 0; i--) {
//your code here
}
循环
并将return
语句带到if
块
答案 3 :(得分:0)
您可以改为调用表单重置功能。</ p>
删除示例元素的style属性!
答案 4 :(得分:0)
这可能会有所帮助:
for (var i = 0; i < colors.length; i++) {
var index = colors[i].name_prop.indexOf(select.value);
if (index !== -1) {
colors.splice(i, 1);
return false;
}
}
indexOf
可能没用,也不可靠。我太懒了,无法进一步调查,请看另一种方式的答案:https://stackoverflow.com/a/20900571/1636522。
答案 5 :(得分:0)
我已经重构你删除功能;
function Remove () {
var selectedIndex = document.getElementById("selectColor").selectedIndex;
var options=document.getElementById("selectColor").options;
for(var i = 0; i < options.length; i++) {
if(options[selectedIndex].text === colors[i].name_prop){
alert(colors[i].name_prop + "removed");
colors.splice(i, 1);
return false;
}
}
}
从颜色数组
中删除所选项目