简体   繁体   English

验证从jQuery JavaScript中的php循环生成的表单元素

[英]Validate form elements generated from php loop in jquery javascript

Hello i have problem for stopping form submission here. 您好,我在此处停止提交表单时遇到问题。

My form has unlimited text fields, i mean sometimes can be zero, one, three .. n number 我的表单具有无限文本字段,我的意思是有时可以是零,一,三.. n号

Here is code 这是代码

<?php
$adultsNum = 3; $childNum = 2;
$countPeople = 1;
?>

<form action="./show.php" method="post" onsubmit="return checkFrom();">

   <?php for ($i = 0; $i < $adultsNum; $i++) { ?>
   <div class="person adult">
      <input type="hidden" id="adult<?=$countPeople;?>">
      <input type="text" name="fnameAdult[]" id="fnameAdult">
      <input type="text" name="lnameAdult[]" id="lnameAdult">
   </div>
   <?php $countPeople++; } ?>

   <?php for ($j = 0; $j < $childNum; $j++) { ?>
   <div class="person child">
      <input type="hidden" id="child<?=$countPeople;?>">
      <input type="text" name="fnameChild[]" id="fnameChild">
      <input type="text" name="lnameChild[]" id="lnameChild">
   </div>
   <?php $countPeople++; } ?>

   <button class="continue">Confirm</button>
</form>

I tried to this code to validate the form, but it doesn't work 我尝试使用此代码来验证表单,但是它不起作用

function checkPassenger() {
    $('[id^=adult]').each(function() { // hidden input
         var fnameAdult = $(this).closest('div.person').find("input#fnameAdult").val();
         var lnameAdult = $(this).closest('div.person').find("input#lnameAdult").val();

         if(fnameAdult.length < 1) {
             console.log('error: First name is missing');
             return false;
         }

         if(lnameAdult.length < 1) {
             console.log('error: Last name is missing');
             return false;
         }

    });

    alert("submit form");
    return false;
}

After i click the button, alerts 'submit form' and i want to first validate the form, if all fields validated, then submit the form to show.php file 我单击按钮后,提醒“提交表单”,我想先验证表单,如果所有字段都通过验证,然后将表单提交给show.php文件

You are using id in for loop , best way is give class to fields and check it is filled or not. 您在for循环中使用id,最好的方法是将类赋予字段并检查其是否已填充。

<form action="./show.php" method="post" onsubmit="return checkFrom();">

   <?php for ($i = 0; $i < $adultsNum; $i++) { ?>
   <div class="person adult">
      <input type="hidden" id="adult<?=$countPeople;?>">
      <input type="text" class="fnameadult" name="fnameAdult[]" id="fnameAdult">
      <input type="text" class="lnameadult" name="lnameAdult[]" id="lnameAdult">
   </div>
   <?php $countPeople++; } ?>

   <?php for ($j = 0; $j < $childNum; $j++) { ?>
   <div class="person child">
      <input type="hidden" id="child<?=$countPeople;?>">
      <input type="text" class="fnamechild" name="fnameChild[]" id="fnameChild">
      <input type="text" class="fnamechild" name="lnameChild[]" id="lnameChild">
   </div>
   <?php $countPeople++; } ?>

   <button class="continue">Confirm</button>
</form>

In checkPassenger method you can loop by class 在checkPassenger方法中,您可以按类循环

function checkPassenger() {

    $('.fnameadult').each(function(){
      if ($.trim($(this).val()) == '')
        {
          console.log('error: First name is missing');
          return false;
        }
    });

    $('.lnameadult').each(function(){
      if ($.trim($(this).val()) == '')
        {
          console.log('error: Last name is missing');
          return false;
        }
    });

    //Same for others

    alert("submit form");
    return false;
}

Second way is give same class to all input fields and check 第二种方法是给所有输入字段相同的类并检查

function checkPassenger() {

    var error =0;
    $('.ClassName').each(function(){
      if ($.trim($(this).val()) == '')
        {
          error++;
        }
    });

    if(error>0)
    {
      alert('Please enter all fields');
      return false;
    }

    //Same for others

    alert("submit form");
    return false;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM