Несколько предупреждений Javascript

У меня есть небольшой скрипт, который выполняет множественную проверку двух скрытых полей ввода:

    function checkfs()
{ 
var rating1 = (document.getElementById("rating").value);
var rating2 = (document.getElementById("rating").value);
var rating3 = (document.getElementById("rating").value);
var check1 = (document.getElementById("countpl").value);
var check2 = (document.getElementById("countpl").value);
var check3 = (document.getElementById("countpl").value);

    if (rating3 == 3 && check3 > 22 || check3 < 19){
        alert("message 1");
        window.location.href = 'myteam.php';}

else if (rating2 == 2 && check2 > 21 || check2 < 18){
        alert("message 2");
        window.location.href = 'myteam.php';}

else if (rating1 == 1 && check1 > 20 || check1 < 17){
        alert("message 3");
        window.location.href = 'myteam.php';}       

else {return true;}    
    }    
    window.onload = checkfs;

HTML

    <input name="countpl" id="countpl" type="hidden" value="<?php echo $row_checkfs['count(f_player.id)']; ?>"/>
<input name="rating" id="rating" type="hidden" value="<?php echo $row_checkfs['rating']; ?>"/>                                

Не могу понять, как визуализировать правильный алерт в зависимости от типа сделанного контроля. На данный момент я всегда вижу «оповещение («сообщение 1»)», какая бы проблема ни была обнаружена. Я хочу, чтобы сообщение 1 появлялось, если rating3 == 3 && check3 > 22 || check3 ‹ 19, сообщение 2 появится, если rating2 == 2 && check2 > 21 || check2 ‹ 18 и т. д. Как изменить код, чтобы получить такой результат?


person blips    schedule 08.10.2013    source источник
comment
Ваши звонки .getElementById() ... вы получаете одно и то же значение идентификатора 3 раза. Почему? В любом случае возвращаемое значение этого вызова является элементом DOM, и сравнение элемента DOM с числом не имеет смысла.   -  person Pointy    schedule 08.10.2013
comment
То, как вы это делаете, rating1, rating2 и rating3 будут иметь одинаковое значение. То же самое с check1, check2 и check3.   -  person Bucket    schedule 08.10.2013


Ответы (3)


Попробуй это:

function checkfs()
{ 
var rating = (document.getElementById("rating").value);
var check = (document.getElementById("countpl").value);
alert("rating="+rating+" - Check="+check);
    if (rating == 3 && (check > 22 || check < 19)){
        alert("message 1");
        window.location.href = 'myteam.php';}

else if (rating == 2 && (check > 21 || check < 18)){
        alert("message 2");
        window.location.href = 'myteam.php';}

else if (rating == 1 && (check > 20 || check < 17)){
        alert("message 3");
        window.location.href = 'myteam.php';}       

else {return true;}    
    }    

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

Я также использовал 2 переменные вместо 6 и добавил скобки к условию «или».

Я думаю, что вашей основной причиной неудачи была скобка в условии «или».

Вам следует пересмотреть теорию о приоритете операторов.

person Cedric Simon    schedule 08.10.2013

пытаться

<script>
function checkfs()
{ 
var rating = (document.getElementById("rating").value);
var check = (document.getElementById("countpl").value);

if (rating == 3 && (check > 22 || check < 19)){
alert("message 1");
window.location.href = 'myteam.php';
}

else if (rating == 2 && (check > 21 || check < 18)){
alert("message 2");
window.location.href = 'myteam.php';
}

else if (rating == 1 && (check > 20 || check < 17)){
alert("message 3");
window.location.href = 'myteam.php';
}

else {return true;}    
}    
window.onload = checkfs;
</script>
person Sunil Verma    schedule 08.10.2013

Также рассмотрите возможность использования функций для повторяющихся задач,

function checkfs()
{ 
    var rating = (document.getElementById("rating").value);
    var check = (document.getElementById("countpl").value);
    alert("rating="+rating+" - Check="+check);
    if (rating == 3 && checkThis(check,19,22)){
        alert("message 1");
        window.location.href = 'myteam.php';}

    else if (rating == 2 && checkThis(check,18,21)){
        alert("message 2");
        window.location.href = 'myteam.php';}

    else if (rating == 1 && checkThis(check,17,20)){
        alert("message 3");
        window.location.href = 'myteam.php';}       

    else {return true;}    
} 

function checkThis(tocheck, min, max)
{
   return tocheck<min || tocheck>max;
}
person ankyskywalker    schedule 08.10.2013