2014-11-05 85 views
0

我有一個選項卡設置,其中每個選項卡的內容通過ajax加載。 #tab1是靜態的 - 並且經過驗證的表單的工作原理與通過頁面加載時運行的$(".validate").validate()一樣。 但tab2有相同的形式 - 它並沒有得到驗證。 我假設它是因爲調用初始函數時第二種形式不存在。 ,但即使我在運行ajax時再次調用validate()函數 - 即使這樣,表單也不會被驗證。通過引導標籤驗證ajax生成的內容

HTML:

<div class="tabbable"> 
<ul class="nav nav-tabs"> 
    <li class="active"><a href="#tab1" data-toggle="tab">Personal Details</a></li> 
    <li><a href="test-content.html" class="ajax" data-toggle="tab">Finances</a></li> 
</ul> 
<div class="tab-content"> 
    <div class="tab-pane active" id="tab1"> 
      <form name="ftblPaymentsadd" id="ftblPaymentsadd" action="#" method="post" enctype="multipart/form-data" class="validate" > 
      <input type="text" name="sss" class="required"> 
      <input type="submit" value="go"> 
      </form> 
    </div> 
    <div class="tab-pane active" id="tab2"> 
     <!-- content will be loaded via ajax --> 
    </div> 
</div> 
</div> 

內容來自text-content.html來:

<form name="ftblPaymentsaddww" id="ftblPaymentsaddww" action="#2" method="post" enctype="multipart/form-data" class="validate" > 
<input type="text" name="ssswwws" class="required"> 
<input type="submit" value="go"> 
</form> 

JS:

$('.nav-tabs .ajax').click(function (e) { 
     var thisTab = e.target // activated tab 
     var pageTarget = $(thisTab).attr('href'); 
     var itemNumber = $(this).parent().index()+1; 
     $('.tab-pane').removeClass('active'); 
     $("#tab"+itemNumber).html('loading...'); 
     $("#tab"+itemNumber).load(pageTarget,function(){ 
      $(".validate").validate(); 
     }).addClass('active'); 
});     
+0

你是否將任何規則添加到'.validate()'?如果在DOM準備就緒時添加它們,則必須在完成ajax後重新添加它們。 – Spokey 2014-11-05 15:46:35

+0

未添加任何規則。我認爲再次調用validate()就足夠了。你能否進一步解釋一下要添加什麼,以及在哪裏? – kneidels 2014-11-05 15:49:14

回答

1

當你調用$(".validate").validate(),你只是在頁面上初始化第一個發生的.validate類的插件。 This is a limitation of the plugin,而不是jQuery。

一種解決方法是包裹.validate()方法的.each()內...

$(".validate").each(function() { 
    $(this).validate(); 
}); 

但是,如果所有的形式時,它被稱爲已經存在只會工作。您正試圖以完全不同的新創建表單第二次致電.validate()。通常這會工作,但在你的情況下,它會失敗,因爲你再次使用相同的jQuery類選擇器(請參閱上面的問題)。此外,.validate()不能被調用多次在相同的形式(S)...所有後續調用被忽略。

做的最好的事情是分配一個唯一id給每個窗體以便您可以單獨調用.validate()方法,你需要初始化每一個插件。

+0

瞭解。謝謝你的耐心! 在這裏我想我是如此聰明地使用類而不是ID;) – kneidels 2014-11-05 16:40:16