Кликните сюда

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

Я пробовал следующее, но я думаю, что моя логика неверна:

(#monthlyincome - это идентификатор формы)

$("#submit").click(function() {

  $("#monthlyincome input").each(function() {

       if (!isNaN(this.value)) {
       // process stuff here

       }

   });

});

Есть идеи?

Это весь обновленный код:

$("#submit").click(function() {

    $("#monthlyincome input[type=text]").each(function() {
        if (!isNaN(this.value)) {
            // processing data      
            var age         = parseInt($("#age").val());
            var startingage = parseInt($("#startingage").val());

            if (startingage - age > 0) { 

                $("#field1").val(startingage - age);
                $("#field3").val($("#field1").val());

                var inflationyrs    = parseInt($("#field3").val());
                var inflationprc    = $("#field4").val() / 100;
                var inflationfactor = Math.pow(1 + inflationprc, inflationyrs);
                $("#field5").val(inflationfactor.toFixed(2)); 

                var estyearlyinc    = $("#field6").val();
                var inflatedyearlyinc = inflationfactor * estyearlyinc;
                $("#field7").val(FormatNumberBy3(inflatedyearlyinc.toFixed(0), ",", "."));

                var estincyears = $("#field2").val();
                var esttotalinc = estincyears * inflatedyearlyinc;
                $("#field8").val(FormatNumberBy3(esttotalinc.toFixed(0), ",", "."));

                var investmentrate   = $("#field9").val() / 100;
                var investmentfactor = Math.pow(1 + investmentrate, inflationyrs);
                $("#field10").val(investmentfactor.toFixed(2));

                var currentsavings = $("#field11").val();
                var futuresavings  = currentsavings * investmentfactor;
                $("#field12").val(FormatNumberBy3(futuresavings.toFixed(0), ",", "."));

                //final calculations
                var futurevalue = (1 * (Math.pow(1 + investmentrate, inflationyrs) - 1) / investmentrate);
                var finalvalue = (1 / futurevalue * (esttotalinc - futuresavings));

                $("#field13").val(FormatNumberBy3(finalvalue.toFixed(0), ",", "."));

            }
            // end processing
        }
    });

});

FormatNumberBy3 - это функция для ... форматирования чисел. :)

 David Tang21 янв. 2011 г., 12:35
@ Сондре, я тоже так думал, но он мог (и должен) использовать<button> чтобы обойти эту проблему.
 Sondre21 янв. 2011 г., 12:33
Я не проверял это, но это просто всплыло у меня в голове. Если вы выполняете each () для всех элементов ввода, это, скорее всего, будет также включать кнопку отправки, поэтому он проверит значение вашего подтверждения и неудачу если это не число. Не проверял это, но кажется логичным;) Также код там не закрыт правильно, но это может быть просто ошибка копирования + вставки.
 Sondre21 янв. 2011 г., 12:40
@ Box9 Ye, использование любого другого типа элемента для отправки должно исправить это. Или нацеливание на определенные типы ввода, такие как input [type = text], так как в любом случае это, скорее всего, только те текстовые поля, которые вы хотите проверить. Не так много смысла проверять радиокнопку;)
 Alex Berg21 янв. 2011 г., 12:39
@Sondre: я пытался использовать класс (который соответствует только нескольким полям ввода) с тем же (отрицательным) результатом. Закрытие действительно было ошибкой копирования-вставки. : P @ Box9: На самом деле я не использую кнопку, но она все равно не будет работать, даже если я использую $ (". Classname"). Each ().
 Sondre21 янв. 2011 г., 14:04
@ Алекс Берг Хорошо, вы можете проверить это, и, возможно, вы сможете адаптировать эту функцию к своей.pastebin.com/UajaEc2e мое предложение для простой проверки для вас формы. Надеюсь, что это может быть полезным помощником :) Разделите вашу форму на две формы, где одна - это поля, которые можно заполнить, а другая - только для чтения, куда, как кажется, вставляется результат. Это позволяет избежать попытки проверки формы. коснуться только для чтения части, которую, насколько я вижу, не нужно проверять, так как это данные, полученные из ваших расчетов, которые должны быть там установлены.

Ответы на вопрос(3)

тал пример на Fiddle, чтобы люди могли лучше понять, как его реализовать.

Пример:Кликните сюда

$("#submit").on("click", function() {
  var isValid = [];
  var chkForInvalidAmount = [];
  $('.partialProdAmt').each(function() {
    if ($.trim($(this).val()) <= 0) {
      isValid.push("false");
    } else {
      isValid.push("true");
    }
    if ($.isNumeric($(this).val()) === true) {
      chkForInvalidAmount.push("true");
    } else {
      chkForInvalidAmount.push("false");
    }
  });
  if ($.inArray("true", isValid) > -1) {
    if ($.inArray("false", chkForInvalidAmount) > -1) {
      $(".msg").html("Please enter Correct format ");
      return false;
    } else {
      $(".msg").html("All Looks good");
    }
  } else {
    $(".msg").html("Atlest One Amount is required in any field ");
    return false;
  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form method="post" action="" id="myForm">
  <input type="text" class="partialProdAmt" value="0" />
  <input type="text" class="partialProdAmt" value="0" />
  <input type="text" class="partialProdAmt" value="0" />
  <input type="text" class="partialProdAmt" value="0" />
  <input type="button" value="Send" id="submit" />
</form>
<div class="msg"></div>

Решение Вопроса

Ну тестирование здесь это работает просто отлично:

$(function() {
    $("#submit").click(function() {
        $("#myForm input[type=text]").each(function() {
            if(!isNaN(this.value)) {
                alert(this.value + " is a valid number");
            }
        });
        return false;
    });
});

в форме, похожей на эту:

<form method="post" action="" id="myForm">
    <input type="text" value="1234" />
    <input type="text" value="1234fd" />
    <input type="text" value="1234as" />
    <input type="text" value="1234gf" />
    <input type="submit" value="Send" id="submit" />
</form>

Переместите возврат ложь вокруг, как вы считаете нужным

Изменить: ссылка на код, вставленный в форму ОПhttp://pastebin.com/UajaEc2e

 Alex Berg21 янв. 2011 г., 13:13
Хаха, скорее всего ... Я действительно обновлю весь блок кода, и если у вас есть время, не стесняйтесь проверить его.
 Alex Berg21 янв. 2011 г., 13:07
Я бьюсь головой о стену здесь. Ваш код работает, конечно, и я не могу найти никакой разницы с моим, но мой код по-прежнему не будет работать ...
 Sondre21 янв. 2011 г., 13:12
@ Алекс, ну, не намного больше, я могу помочь тебе, не видя больше твоего кода тогда .. Скорее всего, какая-то глупая ошибка, над которой ты будешь смеяться, когда найдешь ее;)

value это строка Вы должны сначала попытаться преобразовать его в число. В этом случае простой унитарный+ сделает свое дело:

 Alex Berg21 янв. 2011 г., 12:35
Спасибо за ответ. Тем не менее, не повезло, он полностью игнорирует оператор if ...
 jAndy21 янв. 2011 г., 12:35
isNaN("25"); возвращаетсяfalse правильно.

Ваш ответ на вопрос