簡體   English   中英

如何在jQuery中驗證動態文本框值

[英]how to validate dynamic text box values in jquery

預先謝謝,我有一個彈出窗口,其中包含一個動態文本框字段。這些文本框將根據從第一種形式選擇的組合框值進行多個顯示。動態文本框從jquery顯示。 請任何人幫助我單擊提交按鈕時如何驗證動態文本框。 實際上,我必須在發送郵件之前驗證文本框。 我已經編寫了僅驗證靜態文本框的代碼。 我的代碼如下

<head>
<script>
  $(document).ready(function () { 
        $(".myformid").click(function(){
        var nameVal = $('.names').val();
        var emailVal = $('.emails').val();
        var phoneVal = $('.phones').val();       
        if(nameVal == "")   
        {
           $('#errmsg').html("<p style='color:red;font-weight:bold'>Please enter the Name</p>");      
        }   
        else if(emailVal == ""){
          //alert("A textbox is required"); 
          $('#errmsg').html("<p style='color:red;font-weight:bold'>Please enter the email Id</p>"); 
        }
        else if(!ValidateEmail(emailVal))
        {
           $('#errmsg').html("<p style='color:red;font-weight:bold'>Invalid Email Id</p>");  

        }
        else if(phoneVal == "")   
        {
           $('#errmsg').html("<p style='color:red;font-weight:bold'>Please enter the Phone Number</p>");

        }
        else if(isNaN(phoneVal))
        {
           $('#errmsg').html("<p style='color:red;font-weight:bold'>Please enter the Valid Phone Number</p>");

        }
        else if(emailVal !="" && phoneVal != "")    
        {
           $('#errmsg').text(" ");

           var username = $('#usernameId').val();
    var length = $('#lengthId').val();    
    var nameArray = [];     
    var emailArray = [];
    var phoneArray = [];
    $('.names').each(function(){
       nameArray.push(this.value);         

    });    
    var nameboxVal = nameArray.join(",");           

    //alert(nameboxVal);     

    $('.emails').each(function(){
       emailArray.push(this.value);

    });
    var emailboxVal = emailArray.join(",");
    //alert(emailboxVal);  

    $('.phones').each(function(){
       phoneArray.push(this.value);   

    });
    var phoneboxVal = phoneArray.join(",");          

    //alert(phoneboxVal);

      $.ajax({

          type: "POST",
          url: "/invl_exams/popSubmit",   
          data: {user:username,name:nameboxVal,email:emailboxVal,phone:phoneboxVal,lengths:length},              
          success: function(result){  

            console.log(result);

            $('#mailSuccess').text('Mail Send Successfully');         
            $('#mailSuccess').fadeOut(5000);
          }

        });


        }

       });

      });

// Passing dynamic textboxes inside the dialog box
    $(".create-user").change(function(){      

        var selVal = $(this).val();         
        $('#lengthId').val(selVal);    
        $("#textboxDiv").html('');    


        if(selVal > 0) {

            for(var i = 1; i<= selVal; i++) {   

              var sno = i;               


               $("#textboxDiv").append('<tr><td>'+sno+'. </td><td>Name:<input type="text" name="names" class="names" value="" required="required" /></td><td>&nbsp;</td><td>Email:<input type="email" name="emails" class="emails" value="" required="required" /></td><td>&nbsp;</td><td>Phone:<input type="text" name="phones" class="phones" value="" required="required" minlength="10" maxlength="16"/><br/></td></tr>');         

            }                            

          }


    });  

  });


</script>
</head>
<body>
  <div id="dialog" title="Enter details to send Mail">   
     <!--<form id="myformid" method="post" action="<?php //echo $this->webroot?>users/sendmail">-->
      <div id="mailSuccess" style="color:#019002;font-weight:bold"></div> 
      <form id="myformid" method="post">     
      <table id="examtable">   
        <tr>
         <td>&nbsp;</td>
         <td>&nbsp;</td>
         <td>&nbsp;</td>
        </tr>        
        <tr> 
          <div id="textboxDiv"></div>  
          <input type="hidden" name="username" id="usernameId" value="<?php echo $this->Session->read('Auth.User.username'); ?>">
          <input type="hidden" name="length" id="lengthId" value="">                                    
        </tr>
      <tr>
       <td>&nbsp;</td>
       <td>&nbsp;</td>
       <td>&nbsp;</td>
       <td>        
         <!--<input type="submit" name="btnSubmit" value="Submit">-->
        <input type="button" name="btnSubmit" value="Send Mail" id="popSubmit">                           
       </td>        
      </tr>
      </table>
      </form>
    </div>
   </div>
</body>

我認為無論元素是靜態的還是動態的,都根本沒有進行任何驗證。

$(".myformid").click(function(){

不會綁定任何東西,因為沒有任何帶有“ myformid” 類的元素。 “。” 選擇器的開頭表示課程。

但是,您確實有一個ID為 “ myformid”的元素。 如果從更改選擇器。 #表示ID,然后將事件綁定到表單。 但是,“ click”不是綁定到<form>元素的正確事件。 您要處理表單的“ submit”事件:

$("#myformid").submit(function(event){

最后,就目前情況而言,您的表單將執行常規(非ajax)回發並運行您的函數,因為未取消submit事件的默認行為。 將此行添加為上述函數的第一行:

event.preventDefault();

這將阻止定期回發,並允許您執行驗證功能。 到那時,您應該有一個可行的解決方案,假設您想要的是驗證代碼中的邏輯。

如果您的驗證正確,則只需要附加事件即可支持動態創建的元素(jQuery on)

$( selector ).live( events, data, handler );                // jQuery 1.3+
$( document ).delegate( selector, events, data, handler );  // jQuery 1.4.3+
$( document ).on( events, selector, data, handler );        // jQuery 1.7+

例如

$(".myformid").click(function(){/*Some action*/});

$("body").on('click', ".myformid", function(){/*Some action*/});

$(".create-user").change(function(){/*Some action*/});

$("body").on('change', ".create-user", function(){/*Some action*/});

小建議:盡量避免使用$(“ body”)選擇器,您可以看到什么是動態生成的內容/元素的父元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM