【问题标题】:Update panel conflicts with jquery validation更新面板与 jquery 验证冲突
【发布时间】:2011-11-23 07:51:10
【问题描述】:

我一直在提交点击中使用 jQuery 验证。我的页面包含两个 div。

当我将两个 div 放在单个更新面板中时出现问题,验证停止工作,错误显示

Uncaught TypeError: Object [object Object] has no method 'validate'

当更新面板被评论时,一切正常,但有完整的回发(我不想要)。

我几乎使用了所有在互联网上找到的东西(noConflicts、Sys.WebForms.PageRequestManager.getInstance() 等)

谁能帮助我更多?

代码:

头:

<script type="text/javascript" src="../../Javascript/Validators/jquery.validate.js"></script>
<script type="text/javascript">
    jQuery(document).ready
    (
      function () {
          jQuery("#btn_Save").live("click", function () {
              jQuery("#form1").validate
        (
          {
              rules: {
                  txtContactPerson: "required"
              },
              messages: {
                  txtContactPerson: " * Please enter Contact Person Name"
              }
          }
        );
          });
      }
    ); 
</script>          

身体:

更新面板中的两个简单列表 div

【问题讨论】:

  • 你能用样本解释一下标记的意义​​吗?
  • 以上查询是用代码示例编辑的,请帮忙
  • 根据我的经验,尝试将 MS Ajax 和 jQuery 与 Web 表单混合使用充满了这样的“陷阱”。如果您真的想使用 UpdatePanel,请考虑使用标准 ASP.NET 验证器控件。但是,如果您真的想使用 jQuery 验证和 Ajax,那么请考虑使用带有普通表单(即没有 runat="server")的 jQuery Form 插件,该表单发布到处理 POST 变量的处理程序。
  • 我不能在没有 runat="server" 的情况下使用表单,因为我在 div 中使用 gridview 和 asp:textbox。

标签: jquery asp.net validation asp.net-ajax updatepanel


【解决方案1】:

实际上,您可以在服务器表单中使用 jQuery 验证。但是使用 UpdatePanel 变得很棘手。尝试以下方法:

在标题中:

<script type="text/javascript">
     $(function () {
          $("#form1").validate(
          {
               rules: {
                    '<%= txtContactPerson.ClientID %>': "required"
               },
               messages: {
                    '<%= txtContactPerson.ClientID %>': " * Please enter Contact Person Name"
               }
          });
     })          
</script>

就在 ScriptManager 控件之后:

<script type="text/javascript">
     Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequestHandler);

     function initializeRequestHandler(sender, args) {
          if (args.get_postBackElement().id == '<%= btn_Save.ClientID %>' && $("#form1").valid() !== true) {
               args.set_cancel(true);
          }
     }
</script>

标记:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
     <ContentTemplate>
          <asp:TextBox runat="server" ID="txtContactPerson" />
          &nbsp;
          <asp:Button ID="btn_Save" runat="server" Text="Submit" />
     </ContentTemplate>
</asp:UpdatePanel>

如果您不仅要为 btn_Save 禁用异步回发,只需删除以下代码:args.get_postBackElement().id == '&lt;%= btn_Save.ClientID %&gt;' &amp;&amp;

【讨论】:

  • 它仍然不工作,显示的错误是:(1)未捕获的类型错误:对象[对象对象]没有方法'验证'(2)未捕获的类型错误:对象[对象对象]没有方法'有效'
  • 未引用验证插件。检查指向jquery.validate.js 文件的链接及其内容。确保将 src 属性更改为此:'jquery.bassistance.de/validate/lib/jquery.js'
  • 我更改了提到的链接,但仍然没有成功,两个错误仍然存​​在。据我了解,validate.js 脚本没有任何问题,因为它在删除更新面板后立即运行良好。如果您可以提供您的电子邮件,我可以将页面和文件发送给您。
  • 顺便问一下,您使用的是哪个框架版本?如果是 3.5 版本,请尝试将选择器从 $("#form1") 更改为 $("#aspnetForm")
  • 我正在使用 3.5,$("#aspnetForm") 也无法正常工作。我会尽快将代码副本发送给您...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2010-11-01
  • 2013-01-05
  • 2011-04-11
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多