この投稿は正しい軌道に乗っていましたが、さらに一歩進める必要があります。私の入力名には、連続していないインデックス値が割り当てられている可能性があります。
背景: 長い一連のチェックボックスの代わりに、ドロップボックスで値を選択してリストを作成するルーチンがあります。これにより、画面上のスペースを削減できます。そのため、ユーザーがドロップダウンから値を選択すると、スクリプトは選択が存在しないことを確認しようとし、存在する場合は再度追加しません。
生成されたリストは次のようになります。
<div id="Access:search_div">
<ul class="options">
<li onclick="removeRoleOptions(this,'Access:search_div');"><input type="hidden" name="Access:search[7]" value="1" />Standard</li>
<li onclick="removeRoleOptions(this,'Access:search_div');"><input type="hidden" name="Access:search[8]" value="1" />Premium</li>
<li onclick="removeRoleOptions(this,'Access:search_div');"><input type="hidden" name="Access:search[10]" value="1" />Lifetime</li>
<li onclick="removeRoleOptions(this,'Access:search_div');"><input type="hidden" name="Access:search[14]" value="1" />SysOp</li>
</ul>
</div>
値を見つける方法の例はたくさんありますが、これは単なるブール値なので、リストにある場合は常に 1 になります。必要なのは、名前を検索して、どのインデックス値が付加されているかを確認することです。上記のコードでは、ドロップダウンから選択したアイテムの値を 7、8、10、および 14 と比較します。
これまでのコードの重要な部分は次のとおりです。
function addRoleOptions(select, variable, output) {
var display=document.getElementById(output);
var option = select.options[select.selectedIndex];
var ul = display.getElementsByTagName('ul')[0];
if (!ul) {
ul = document.createElement("ul");
ul.setAttribute('class', 'options');
display.innerHTML = '';
display.appendChild(ul);
}
var choices = ul.getElementsByTagName('input');
for (var i = 0; i < choices.length; i++) {
if (choices[i].value == option.value) {
return;
}
}
option.value は、比較対象の数値を保持します。
私の質問は、名前の [] 内の値を解析して、送信されている値と比較するにはどうすればよいですか?