Результат jquery не подходит даже правильно.

Следующий фрагмент кода не дает ожидаемого результата. Я пробовал много раз, чтобы получить точный результат, но бесполезно. Пожалуйста, дайте мне знать, почему это происходит и где я совершил ошибку.

<title>My try</title>
4 ответа

Вы пытаетесь получить значение до нажатия кнопки. Когда вы вызываете .val() он возвращает строку, которая не изменяется при изменении фактического значения ввода.

Когда вы нажимаете, значения остаются теми же значениями, поэтому вы получаете неправильный вывод.

Вместо этого вы можете сохранить элементы в переменной и получить значение при нажатии кнопки.

Это должно работать как шарм:

$(document).ready(function(){
 var a = $("#a");
 var b = $("#b");

 $("#submit").on("click", function(){
 var sum = parseInt(a.val(), 10) + parseInt(b.val(), 10);
 alert(sum);
 })
});

Как отметил А. Вольф, поскольку .val() возвращает строки, добавление их фактически конкатенация. Поэтому сначала нужно принудительно ввести значения в число, следовательно, parseInt().


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

  • Ошибка 2: вам нужна sum но вы просто конкатенируете две strings не int чтобы выполнить добавление, сначала parse их до int через parseInt()

    $(document).ready(function(){
    $("#submit").on("click", function(){
     var a = $("#a").val();
     var b = $("#b").val(); 
     var sum = parseInt(a) + parseInt(b);
     alert(sum); 
    })
    })


Hy!

Вы сделали две вещи неправильно:

Прежде всего, вы должны поместить put getters в функцию "click".

$("#submit").on("click", function(){
 var a = $("#a").val();
 var b = $("#b").val();

И, наконец, JQuery по умолчанию получает строку из значения, поэтому вам нужно преобразовать переменные (a и b) в integer by parseInt()

И демо


DEMO

$(document).ready(function () {
 $("#submit").on("click", function () {
 var a = +$("#a").val();
 var b = +$("#b").val();
 var sum = a + b;
 alert(sum);
 })
})

licensed under cc by-sa 3.0 with attribution.