旧的JavaScript来排序列表中的项目

时间:2010-10-25 13:10:59

标签: javascript html

我一直使用此代码对列表中的项目进行排序,然后将订单提交回数据库。

但是代码在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;
}

3 个答案:

答案 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开发,请查看它。