【问题标题】:Validating ajax-generated content via bootstrap tabs通过引导选项卡验证 ajax 生成的内容
【发布时间】:2014-11-05 15:35:55
【问题描述】:

我有一个选项卡设置,其中每个选项卡的内容都是通过 ajax 加载的。 #tab1 是静态的 - 并且经过验证的表单可以通过在页面加载时运行的 $(".validate").validate() 正常工作。 但在tab2 中存在相同的形式 - 它根本没有得到验证。 我假设它是因为调用初始函数时不存在第二种形式。 但即使我在运行 ajax 时再次调用 validate() 函数 - 即使那样,表单也不会被验证。

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');
});                 

【问题讨论】:

  • 您是否向.validate() 添加任何规则?如果您在 DOM 准备就绪时添加它们,则必须在 ajax 完成后重新添加它们
  • 没有添加规则。我认为再次致电validate() 就足够了。您能否进一步解释一下要添加什么以及在哪里添加?

标签: jquery twitter-bootstrap jquery-validate


【解决方案1】:

当您调用$(".validate").validate() 时,您只是在页面上第一次 出现.validate 类时初始化插件。 This is a limitation of the plugin,不是 jQuery。

一种解决方法是将.validate() 方法包装在.each()...中...

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

但是,只有在调用时所有表单都已存在时,这才有效。您正在尝试以完全不同的新创建表单第二次调用.validate()。通常这会起作用,但在您的情况下它会失败,因为您再次使用相同的 jQuery 类选择器(请参阅上面的问题)。除此之外,.validate()不能在同一个表单上被多次调用......所有后续调用都将被忽略。

最好的办法是为每个表单分配一个唯一 id,这样您就可以分别调用.validate() 方法,因为您需要在每个表单上初始化插件。

【讨论】:

  • 明白了。谢谢你的耐心!在这里,我认为我使用类而不是 ID 非常聪明;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多