2016-01-09 2 views
1

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

$(':input[value=""]').attr('name', ''); 

на основе быстрого поиска, но это не имеет желаемого эффекта (форма по-прежнему возвращает "NaN, NaN.

Расчеты выполняются, когда пользователь нажимает кнопку с использованием следующего JQuery

$(".calc").click(function() { 
    $("input[type=text]").each(function() { 
    arr.push($(this).val()); 
    sum += parseInt($(this).val());  
    }); 

    var n = arr.length; 
    var AVG = (sum/n); 
    alert(sum + "," + AVG); 
    arr = []; 
    sum = 0; 
}); 

Любые предложения?

+1

Используйте инструкцию if, чтобы проверить, что такое $ (this) .val(). Если поле пустое, оно должно возвращать пустую строку, которая дает вам NaN, когда вы пытаетесь вызвать parseInt на нем. – kaminari

+0

Почему бы просто не проверить каждое поле и, если оно пустое, вычесть его из числа полных полей, чтобы разделить и игнорировать значение поля? – Araymer

+0

Добавлен простой || оператор. проверьте мой ответ –

ответ

3

Попробуйте, как это ниже. Я добавил отделки, а также для фильтрации пустых пространств.

$(".calc").click(function() { 
    $("input[type=text]").each(function() { 
    arr.push($(this).val().trim() || 0); 
    sum += parseInt($(this).val().trim() || 0);  
    }); 

    var n = arr.sort().filter(function(i){return i}).length; 
    var AVG = (sum/n); 
    alert(sum + "," + AVG); 
    arr = []; 
    sum = 0; 
}); 
+0

Так близко! Он по-прежнему делит сумму на общее количество видимых входов. Например, если 3 и один пуст, среднее значение вычисляется с использованием трех значений данных. Однако он решил проблему «NaN», но это потому, что она просто помещает значение 0 в пустое поле. – newbie2015

+0

Добавлен код для фильтрации Zero из массива. –

+2

в сторону: '.filter (function (i) {return i})' == '.filter (Boolean)' (меньше ввода) – dandavis