8

複数選択タグ内で選択された最後のオプション タグのみを削除するため、Opera ブラウザーの JS コードに問題があるようです。誰か助けてください。

このための HTML は次のとおりです。

<select id="actions_list" name="layouts" multiple style="height: 128px; width: 300px;">
    <option value="forum">forum</option>
    <option value="collapse">collapse</option>
    <option value="[topic]">[topic]</option>
    <option value="[board]">[board]</option>
</select>

もちろんフォームタグ内にありますが、このフォームに関連するコードは他にもたくさんありますが、これに関連する情報は次のとおりです。

これを処理するJSは次のとおりですが、Operaで最後に選択したオプションのみを削除します。他のブラウザについてはわかりませんが、最後に選択したオプションだけでなく、選択したすべてのオプションを削除する必要があります...

var action_list = document.getElementById("actions_list");
var i = action_list.options.length;
while(i--)
{
    if (action_list.options[i].selected)
    {
        action_list.remove(i);
    }
}

これの何が問題なのですか?ちょっと判りません。

ありがとう

4

4 に答える 4

12

jQuery でこれを行うのが最も簡単ですが、できる限りプレーンな Javascript を使用してこれを行う必要があります。

発生している問題は、Opera のオプション リストから項目を削除すると、選択されているすべての項目の選択が解除されるため、最初の項目のみが削除されることです。回避策は、アイテムを削除する前に、まずどのアイテムが選択されたかを覚えておくことです。

var action_list = document.getElementById("actions_list");

// Remember selected items.
var is_selected = [];
for (var i = 0; i < action_list.options.length; ++i)
{
    is_selected[i] = action_list.options[i].selected;
}

// Remove selected items.
i = action_list.options.length;
while (i--)
{
    if (is_selected[i])
    {
        action_list.remove(i);
    }
}
于 2010-06-12T05:19:38.823 に答える
6

jQueryを使用すると、はるかに簡単に実行できます。

$('#actions_list option:selected').remove()
于 2010-06-12T04:55:28.970 に答える
0
$.each($('[name="alltags"] option:selected'), function( index, value ) {
  $(this).remove();
});

代わりにこれを試して、複数の選択を削除してください

于 2013-11-01T02:54:07.770 に答える