options.remove();没有工作,奇怪的行为

时间:2018-02-23 12:12:07

标签: javascript php select

我有一个贝宝选择,我有不同的选择。我想只选择一个选项并删除其余选项。为此,我得到了这段代码:

var selectobject=document.getElementById("os0"); //this is the select
        for (var i=0; i<selectobject.length; i++){
        if (selectobject.options[i].value != <?php echo $people; ?> ){
            selectobject.remove(i);
            alert(i);
        }
    }

这是从paypal中选择的,

<input type="hidden" name="on0" value="people">people</td></tr><tr><td><select name="os0" id="os0">
    <option id="1" value="1">1 €123,97 EUR</option>
    <option id="2" value="2">2 €249,94 EUR</option>
    <option id="3" value="3">3 €371,91 EUR</option>
    <option id="4" value="4">4 €495,88 EUR</option>
    <option id="5" value="5">5 €619,85 EUR</option>
    <option id="6" value="6">6 €743,82 EUR</option>
    <option id="7" value="7">7 €867,79 EUR</option>
    <option id="8" value="8">8 €991,76 EUR</option>
    <option id="9" value="9">9 €1.115,73 EUR</option>
    <option id="10" value="10">10 €1.239,70 EUR</option>
</select>

所以发生的事情是超级奇怪,它只删除了paar数字,只计算到5或6,结果如果我发送例如1个人是:

  • 1€123,97 EUR
  • 3€371,91 EUR
  • 5€619,85 EUR
  • 7€867,79 EUR
  • 9€1.115,73 EUR

如果我选择2个人:

  • 2€249,94 EUR
  • 4€495,88 EUR
  • 6€743,82 EUR
  • 8€991,76 EUR
  • 10€1.239,70 EUR

我也有警告告诉我在哪里&#34;我&#34;它只是上升到5或4,不明白。

1 个答案:

答案 0 :(得分:4)

当您移除i处的选项时,您将所有其他选项拖垮;现在,下一个选项是i。但是,因为你正在使用for循环,你正在递增i - 并且你在删除选项后从未查看过该选项。

相反,如果不删除该选项,请使用while循环并仅增加i

var selectobject = document.getElementById("os0"); //this is the select
var i = 0;
while (i < selectobject.length) {
    if (selectobject.options[i].value != <?php echo $people; ?> ){
        selectobject.remove(i);
        alert(i);
    } else {
        ++i;
    }
}

使用3(没有alert)的实例:

var people = 3;
var selectobject = document.getElementById("os0"); //this is the select
var i = 0;
while (i < selectobject.length) {
    if (selectobject.options[i].value != people){
        selectobject.remove(i);
    } else {
        ++i;
    }
}
<select name="os0" id="os0">
    <option id="1" value="1">1 €123,97 EUR</option>
    <option id="2" value="2">2 €249,94 EUR</option>
    <option id="3" value="3">3 €371,91 EUR</option>
    <option id="4" value="4">4 €495,88 EUR</option>
    <option id="5" value="5">5 €619,85 EUR</option>
    <option id="6" value="6">6 €743,82 EUR</option>
    <option id="7" value="7">7 €867,79 EUR</option>
    <option id="8" value="8">8 €991,76 EUR</option>
    <option id="9" value="9">9 €1.115,73 EUR</option>
    <option id="10" value="10">10 €1.239,70 EUR</option>
</select>