2015-02-17 2 views
-1

У меня есть 5 выбранных входных данных в форме, и для проверки я хочу убедиться, что они не имеют того же значения. параметры выбора одинаковы, но для выбора должен быть выбран один индивидуальный вариант. Это код, который у меня сейчас не работаетКак проверить, имеет ли несколько html-выбор одно значение

var bk1 = document.getElementById("block1").value; 
var bk2 = document.getElementById("block2").value; 
var bk3 = document.getElementById("block3").value; 
var bk4 = document.getElementById("block4").value; 
var bk5 = document.getElementById("block5").value; 
var res = true;  
    if(bk1 !=== bk2 && bk1 !=== bk3 && bk1 !=== bk4 && bk1 !=== bk5) 
    { 
     res = true; 
    }else 
    { 
     res = false; 
    }   
    if(bk2!===bk1 && bk2 !===bk3 && bk2!===bk4 && bk2!===bk5) 
    { 
     res = true; 
    }else 
    { 
     res = false; 
    }   
    if(bk3!===bk2 && bk3 !===bk1 && bk3!===bk4 && bk3!===bk5) 
    { 
     res = true; 
    } 
    else 
    { 
     res = false; 
    }  
    if(bk4!===bk2 && bk4 !===bk3 && bk4!===bk1 && bk4!===bk5) 
    { 
     res = true; 
    } 
    else 
    { 
     res = false; 
    }  
    if(bk5!===bk2 && bk5 !===bk3 && bk5!===bk4 && bk5!===bk1) 
    { 
     res = true; 
    }else 
    { 
     res = false; 
    }  
    if(res === true) 
    { 
    alert("yes"); 
    document.block_form.submit(); 
    }else 
    { 
     alert("wrong"); 
     document.getElementById("block_error").value = "Multiple blocks have same selected option"; 
    } 
+0

Я бы поставил переменные в массиве, корыто петли, что массив andsee, если у вас есть дубликаты. А также .. вы используете '! ===' он должен быть '! ==' или '! ='. – putvande

+0

для подтверждения? – Eddy

+0

Зачем нужны 5 условий if-else для проверки уникальности. Одного хватит. –

ответ

1
  1. Создать массив значений;
  2. Проверить массив для дублированных значений.

Например:

var bk1 = document.getElementById("block1").value; 
var bk2 = document.getElementById("block2").value; 
var bk3 = document.getElementById("block3").value; 
var bk4 = document.getElementById("block4").value; 
var bk5 = document.getElementById("block5").value; 

var test = [bk1, bk2, bk3, bk4, bk5]; 
var res = true; 
for(var i = 0; i < test.length; i++) { 
    if (test.indexOf(test[i], i + 1) >= 0) { 
    res = false; 
    break; 
    } 
} 

if(res){ 
    alert("yes"); 
    document.block_form.submit(); 
}else{ 
    alert("wrong"); 
    document.getElementById("block_error").value = "Multiple blocks have same selected option"; 
} 
+0

Спасибо, но это не сработало – Eddy

+0

Не могли бы вы привести пример значений? Я пробовал разные случаи, и все время моя часть кода устанавливает переменную «res» в «false», если имеется 2 дублированных значения. –

+0

опции: назначение, раздел, урок, пользователи, модераторы – Eddy

0

Используйте этот сладкий код вместо этого.

var arr= [], res=true; 
    for(var i=1; i<=5; i++) 
    { 
     var curVal = document.getElementById("block"+i).value; 
     if(arr.indexOf(curVal)!==1) {res=false; break;} 
     else arr.push(curVal); 
    } 


if(res) 
    { 
    alert("yes"); 
    document.block_form.submit(); 

    } 
else 
    { 
     alert("wrong"); 
     document.getElementById("block_error").value = "Multiple blocks have same selected option"; 
    } 
+0

продолжать получать предупреждение за неправильное, даже если у них нет одинаковых выбранных опций. – Eddy

1

Имея цикл по массиву значений звучит лучше, но только в том случае, если вы хотите придерживаться своего собственного метода:

var bk1 = document.getElementById("block1").value; 
var bk2 = document.getElementById("block2").value; 
var bk3 = document.getElementById("block3").value; 
var bk4 = document.getElementById("block4").value; 
var bk5 = document.getElementById("block5").value; 

var res = true; 
if(bk1 == bk2 || bk1 == bk3 || bk1 == bk4 || bk1 == bk5 || 
    bk2 == bk3 || bk2 == bk4 || bk2 == bk5 || 
    bk3 == bk4 || bk3 == bk5 || 
    bk4 == bk5){ 

    res = false; 
} 


if(res){ 
    alert("yes"); 
    document.block_form.submit(); 
}else{ 
    alert("wrong"); 
    document.getElementById("block_error").value = "Multiple blocks have same selected option"; 
} 
+0

работающих. спасибо – Eddy

0

Try это Js скрипка: https://jsfiddle.net/um2ffuqd/

примечание:

if ((bk1 !== bk2 && bk1 !== bk3 && bk1 !== bk4 && bk1 !== bk5) 
&& (bk2 !== bk3 && bk2 !== bk4 && bk2 !== bk5) 
&& (bk3 !== bk4 && bk3 !== bk5) 
&& (bk4 !== bk5)) { 
    res = true; 

} else { 
    res = false; 
} 

невероятно грязный, поскольку многие другие плакаты здесь сказали, что вам действительно нужно использовать цикл. Я старался придерживаться вашего кода как можно больше.

+0

предложите петлю, пожалуйста, – Eddy

+0

обновил мою скрипку с помощью простой петли, которая пробегает все ваши элементы. http://jsfiddle.net/um2ffuqd/1/ Причина, по которой мы говорим вам использовать цикл, заключается в том, что добавление элементов намного проще. Если вы хотите добавить еще два элемента, вам понадобится MOTO LOT больше, если операторы сразу. Работа с кодом, который позволяет гибкие размеры, сэкономит вам много головной боли позже. – twh

0

Или функциональный путь

var bk1 = document.getElementById("block1").value; 
var bk2 = document.getElementById("block2").value; 
var bk3 = document.getElementById("block3").value; 
var bk4 = document.getElementById("block4").value; 
var bk5 = document.getElementById("block5").value; 

var map = {}; 

var res = [bk1, bk2, bk3, bk4, bk5].reduce(function (val, e) { 
    if (map.hasOwnProperty(e)) { 
    return val+1; 
    } else { 
    map[e] = 1; 
    return val; 
    } 
}, 0); 


if (res <= 0) { 
    alert("yes"); 
    document.block_form.submit(); 
} else { 
    alert("wrong"); 
    document.getElementById("block_error").value = "Multiple blocks have same selected option"; 
} 
Смежные вопросы