Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Не выводит alert


Автор: zzdxw 11.11.2017, 21:55
Всем привет!
Помогите разобраться. При нажатии на BUTTON функция должна выводить сообщение в случае, если инпуты не заполнены (не работает). Если заполнены, то выводит результат вычислений в другие инпуты (работает). В чем ошибка?
Код

function proizv() {
    "use strict";
    var a1 = parseInt(document.getElementById('a1').value, 10),
        a2 = parseInt(document.getElementById('a2').value, 10),
        b1 = parseInt(document.getElementById('b1').value, 10),
        b2 = parseInt(document.getElementById('b2').value, 10),
        c1 = parseInt(document.getElementById('c1').value, 10),
        c2 = parseInt(document.getElementById('c2').value, 10),
        x = a1 * b1 + a1 * b2,
        z = b1 * c1 + b2 * c2,
        y = a1 * c1 + a2 * c2;
    
    if(a1.value != '' && a2.value != '' && b1.value != '' && b2.value != '' && c1.value != '' && c2.value != '')
        {
            document.getElementById('ab').value = x;
            document.getElementById('bc').value = z;
            document.getElementById('ca').value = y;
        } else {
            alert('Задайте координаты');
        }
}

Автор: whatisnot 12.11.2017, 13:22
a1 ... c2, это числа (при удаче, и это надо учитывать), а не DOM объекты и у них нет свойства value. И проверять нужно числа, а не на пустую строку:

 if(a1 && a2 && b1 && b2 && c1 && c2) ....

Автор: zzdxw 12.11.2017, 14:30
whatisnot, всё оказалось проще. Возможно я дал мало информации. а1...с2 это числа, которые я ввожу в инпуты.
Разобрался. ParseInt возвращает NaN, и проверять надо было на NaN.
Рабочий код.
Код

function cos() {
    "use strict";
    var a1 = parseInt(document.getElementById('a1').value, 10),
        a2 = parseInt(document.getElementById('a2').value, 10),
        b1 = parseInt(document.getElementById('b1').value, 10),
        b2 = parseInt(document.getElementById('b2').value, 10),
        c1 = parseInt(document.getElementById('c1').value, 10),
        c2 = parseInt(document.getElementById('c2').value, 10),
        x = a1 * b1 + a1 * b2,
        z = b1 * c1 + b2 * c2,
        y = a1 * c1 + a2 * c2;
    
    if ((isNaN(a1) === true) || (isNaN(a2) === true) || (isNaN(b1) === true) || (isNaN(b2) === true) || (isNaN(c1) === true) || (isNaN(c2) === true))
        {
            alert('Задайте координаты');
        } else {
            document.getElementById('ab').value = x;
            document.getElementById('bc').value = z;
            document.getElementById('ca').value = y;
        }
}

Автор: whatisnot 12.11.2017, 18:28
Цитата(zzdxw @  12.11.2017,  14:30 Найти цитируемый пост)
ParseInt возвращает NaN, и проверять надо было на NaN.


Какая чушь.

Автор: zzdxw 12.11.2017, 20:54
whatisnot, тем не менее, так заработало всё. 
И ещё ошибся с логическим оператором &&. Надо было ||. Но это не играет роли, при всех пустых инпутах алерт не выводился.

Автор: whatisnot 12.11.2017, 23:28
Цитата(zzdxw @  12.11.2017,  20:54 Найти цитируемый пост)
тем не менее, так заработало всё. 
Надо было ||. Но это не играет роли, при всех пустых инпутах алерт не выводился.


Надо было как раз ИЛИ.

onkeyup="this.value=this.value.replace(/\D/,'')"

Значения получать можно так: +obj.value или obj.valueAsNumber в современных браузерах.

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/isNaN


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)