2011-01-21 28 views
21

Tôi đang tạo biểu mẫu và chỉ muốn mã thực thi nếu các giá trị đầu vào là số. Tôi đang cố gắng tránh sử dụng một số loại plugin xác nhận và đã tự hỏi nếu có một cách để lặp qua các lĩnh vực đầu vào và kiểm tra các giá trị.Lặp qua các trường nhập để xác thực bằng cách sử dụng Jquery mỗi()

Tôi đã cố gắng sau nhưng tôi nghĩ logic của tôi là sai:

(#monthlyincome là id hình thức)

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

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

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

     } 

    }); 

}); 

Bất kỳ ý tưởng?

Đây là toàn bộ cập nhật mã:

$("#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 là một chức năng cho ... định dạng số. :)

+1

đã không kiểm tra này, nhưng nó chỉ xuất hiện vào đầu của tôi .. Nếu bạn đang làm một() trên tất cả các yếu tố đầu vào, rất có thể sẽ bao gồm nút gửi quá, do đó, nó sẽ kiểm tra giá trị của bạn gửi và thất bại nếu đó không phải là một số. Đã không thử nghiệm này, nhưng có vẻ hợp lý;) Ngoài ra mã có đóng không chính xác, nhưng đó có thể chỉ là một lỗi sao chép + dán. – Sondre

+1

@Sondre, tôi cũng nghĩ như vậy, nhưng anh ấy có thể (và nên) đang sử dụng '

+0

@Sondre: Tôi đã thử sử dụng một lớp (chỉ tương ứng với một vài trường nhập) với cùng một kết quả (âm). Việc đóng thực sự là một lỗi dán bản sao. : P @ Box9: Tôi không sử dụng nút thực sự nhưng nó vẫn không hoạt động ngay cả khi tôi sử dụng $ (". Classname"). Each(). –

Trả lời

34

Vâng thử nghiệm ở đây này chỉ hoạt động tốt:

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

trên một hình thức tìm kiếm như thế này:

<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> 

Di chuyển trả về false khi bạn thấy phù hợp với

Chỉnh sửa: liên kết đến mã được gửi vào biểu mẫu OP http://pastebin.com/UajaEc2e

+0

Tôi đập đầu vào bức tường ở đây. Mã của bạn hoạt động của khóa học và tôi không thể tìm thấy bất kỳ sự khác biệt với tôi nhưng mã của tôi vẫn không hoạt động ... –

+0

@ Phản hồi tốt, không nhiều hơn nữa tôi có thể trợ giúp bạn mà không cần xem thêm mã của bạn. một số lỗi ngu ngốc bạn sẽ cười về một khi bạn tìm thấy nó;) – Sondre

+0

Haha rất có thể ... Tôi sẽ thực sự cập nhật với toàn bộ khối mã và nếu bạn có một thời gian, hãy kiểm tra xem nó ra. –

1

value là một chuỗi. Bạn cần phải cố gắng chuyển đổi nó thành một số đầu tiên. Trong trường hợp này đơn giản đơn nhất + sẽ làm các trick:

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

'isNaN (" 25 ");' trả về 'sai' một cách chính xác. – jAndy

+0

Cảm ơn câu trả lời. Tuy nhiên không may mắn, nó hoàn toàn bỏ qua các tuyên bố nếu ... –

0

Dựa trên Sondre (Cảm ơn bạn! Sondre) ví dụ trên, tôi đã phát triển một mẫu trong Fiddle để Folks có thể hiểu rõ hơn nhiều để thực hiện

Ví dụ: Click Here

$("#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>

Các vấn đề liên quan