2013-10-04 249 views
0

我登錄表單,如下圖所示,jQuery的驗證問題

<a href="#" id="loginLink">click Here to Log in</a> 
<div class="formDiv" id="formDiv"> 
<form name="loginForm" id="loginForm" action="#"> 
    <label>Email</label><input type="text" name="email" id="email"><br/> 
    <label>Passw</label><input type="password" name="pwd" id="pwd"><br/> 
    <input type="submit" value="Log in" id="loginbtn" name="loginbtn"> 
</form> 
</div> 

我上面顯示的形式給用戶使用jQuery Dialog,如果沒有表格對話框(I,E普通的HTML),則驗證沒有任何問題jsfiddle,但如果我在對話框中顯示錶單,則驗證沒有執行jsfiddle,我可否知道背後的原因?

+0

題外話:_「關於與你寫必須說明具體問題的代碼問題的問題 - 和包括有效的代碼重現它在問題本身中**,請參閱[SSCCE.org](http://sscce.org)以獲得指導。「_〜你的所有jQuery在哪裏? – Sparky

回答

2

嘗試http://jsfiddle.net/devmgs/WNMfA/12/

$(文件)。就緒(函數(){

$("a#loginLink").on("click",function(e){ 
    e.preventDefault(); 

    $(".formDiv").dialog({ 
      closeOnEscape: false, 
      title:"Login Form", 
      modal: true, 
      resizable: false, 
      width:'350px', 
      position:'fixed', 

      close:function() 
      {      
       $(".ui-dialog-content").dialog("close"); 
      } 
     }); 
}); 

使用$( 「formDiv」)不重新打開它函數內部。

1

你有幾個主要缺陷...

1)您的代碼稱爲.validate() ...

$(document).on("click", '#loginbtn', function(e){ 
    e.preventDefault(); 
    $("#loginForm").validate();   
    alert('test'); 
    //I want to do Ajax stuff 
}); 

請勿在click處理程序中調用.validate(),因爲它只需要調用一次。 .validate()方法不是在窗體上調用驗證的方法。這只是初始化表單上的插件的方法。因此,就像在您的工作示例中一樣,您必須在窗體構建完成後立即調用.validate(),這通常在DOM ready事件中。上面的整個on('click')處理函數都可以被刪除。

2)打開的對話框中您的代碼...

open:function(){     
    $(this).html($("#formDiv").html()); 
}, 

在您open回調,您複製從隱藏div HTML到您的dialogdiv的形式。這種技術的主要問題是,您現在在同一頁面上有多個元素,並且具有相同的id。這不僅是無效的HTML,而且jQuery Validate插件只適用於這個id的第一個實例,即原始的隱藏實例。取出open回調並附加隱藏div.dialog()這樣的:$("#formDiv").dialog(...

3)您的評論表示您要提交此表格ajax()。如果是這種情況,請使用jQuery Validate插件的submitHandler回調函數。 As per documentation,這是「在經過驗證後通過Ajax提交表單的正確位置」。

$("#loginForm").validate({ // initialize the plugin 
    submitHandler: function (form) { 
     // your ajax here;    // submit the data 
     $("#formDiv").dialog("close"); // close the dialog 
     alert('submitted with ajax'); // for demo 
     return false;     // prevent regular form submit action 
    } 
}); 

工作演示:http://jsfiddle.net/TRHxZ/

$(document).ready(function() { 

    $("#loginForm").validate({ // initialize the plugin 
     submitHandler: function (form) { 
      // your ajax here;    // submit the data 
      $("#formDiv").dialog("close"); // close the dialog 
      return false;     // prevent regular form submit action 
     } 
    }); 

    $("a#loginLink").on("click", function (e) { 
     e.preventDefault(); 

     $("#formDiv").dialog({ 
      closeOnEscape: false, 
      title: "Login Form", 
      modal: true, 
      resizable: false, 
      width: '350px', 
      position: 'fixed', 
      close: function() { 
       $(".ui-dialog-content").dialog("close"); 
      } 
     }); 
    }); 

}); 
+0

你說過我的問題是不正確的,1小時後,你已經給出了一個冗長的答案,雖然前面的答案描述了相同的簡單,無論如何感謝您的努力回答我的offtopic問題。 –

+0

@ Mahesh.D,因爲沒有在問題中顯示完整的代碼,所以它只是無關緊要。將你的jsFiddle中的jQuery代碼複製到你的OP中,它將成爲主題。 – Sparky

+0

+1表示正確的方法之一,謝謝 –