我一直使用此代码对列表中的项目进行排序,然后将订单提交回数据库。
但是代码在Firefox或Chrome中不起作用。它会跳转然后清除列表中的内容。自2002年以来一直使用它只在IE中运行得非常好..
var list;
function moveUp() {
list = document.forms[0].lists;
var index = list.selectedIndex;
if (index > 0) {
var item = list.options[index];
list.remove(index);
list.add(item, index - 1);
}
}
function moveDown() {
list = document.forms[0].lists;
var index = list.selectedIndex;
if (index > -1 && index < list.options.length - 1) {
var item = list.options[index];
list.remove(index);
list.add(item, index + 1);
}
}
function doSubmit() {
var s = "";
list = document.forms[0].lists;
for (var i = 0; i < list.options.length; i++) {
s += list.options[i].value + " ";
}
document.forms[0].order.value = s;
return false;
}
答案 0 :(得分:2)
问题在于list.add(item,index)
。这是非标准的,仅适用于IE。对于Chrome和Firefox,您应该使用document.createElement("option")
创建一个Option元素。看一下示例代码here
答案 1 :(得分:2)
list.add(item, index + 1);
HTMLSelectElement#add
的第二个参数是supposed to be兄弟选项,而不是索引。不幸的是,IE的add()
方法没有实现该标准。这在IE8标准模式中有所改变。
为避免此问题,您可以使用普通的insertBefore
代替。
答案 2 :(得分:0)
document.forms [0] .lists未在Firefox或Chrome中定义。我不确定这是什么,但如果那些不支持它那么它可能是IE的非标准命名约定。
最好使用document.getElementById()并为列表指定id值来访问列表。
为了将来参考,使用Firebug可以非常轻松地使用Firefox进行调试,如果您想进行Javascript开发,请查看它。