У меня есть пять вариантов с одинаковыми значениями в нем. Есть ли способ выбрать все индексы тега option, а не первый индекс.Любое решение для выбора выпадающего значения, а не первого индекса
Рассмотрим этот Js скрипку же
var duplicates = [];
function checkResult(){
var box1 = document.getElementById('box_g1');
var box2 = document.getElementById('box_g2');
var box3 = document.getElementById('box_g3');
var box4 = document.getElementById('box_g4');
var box5 = document.getElementById('box_g5');
var b1 = box1.options[box1.selectedIndex].value;
var b2 = box2.options[box2.selectedIndex].value;
var b3 = box3.options[box3.selectedIndex].value;
var b4 = box4.options[box4.selectedIndex].value;
var b5 = box5.options[box5.selectedIndex].value;
console.log(b1);
console.log(b2);
console.log(b3);
console.log(b4);
console.log(b5);
var arr = [b1,b2,b3,b4,b5];
var hash = [];
for (var n=arr.length; n--;){
if (typeof hash[arr[n]] === 'undefined') hash[arr[n]] = [];
hash[arr[n]].push(n);
}
for (var key in hash){
if (hash.hasOwnProperty(key) && hash[key].length > 1){
duplicates.push(key);
}
}
if(duplicates.length > 0){
alert("duplicate found");
}else{
alert("No duplicate");
}
duplicates.length =0;
}
<select name="n1" id="box_g1">
<option value="Default">Default</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
</select>
<br/>
<select name="n2" id="box_g2">
<option value="Disabled">Disabled</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
</select>
<br/>
<select name="n3" id="box_g3">
<option value="Disabled">Disabled</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
</select>
<br/>
<select name="n4" id="box_g4">
<option value="Disabled">Disabled</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
</select>
<br/>
<select name="n5" id="box_g5">
<option value="Disabled">Disabled</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
</select>
<br/>
<br/>
<input type="submit" value="Check Result" onclick="checkResult();"/>
Я сделал некоторые хитрости. Но не в состоянии определить, можно ли это или нет.
Для box2, box3, box4 и box5, если пользователь выбирает опцию «Disbaled» для любого из полей, а не box1.
пользователю будет показано всплывающее окно: «Duplicates found».
В настоящее время, если я выбираю «Отключено» вариант, он показывает дубликат, который я не хочу.
'hash' - массив, его индексы должны быть целыми числами. Но 'arr [n]' - строка. Вы должны использовать объект, а не массив. – Barmar
В вашем первом цикле 'for' вы можете просто не проверять' if (arr [n]! = "Отключено") 'перед добавлением в' hash'? – Rhumborl
Кстати, вы можете просто написать 'var b1 = box1.value;'. Значение select - это значение его выбранного параметра. – Barmar