在modal和twitterbootstrap向导中运行jquery验证?

在modal和twitterbootstrap向导中运行jquery验证?,jquery,asp.net,twitter-bootstrap,Jquery,Asp.net,Twitter Bootstrap,希望有人能帮我解决这个问题,已经快一天了,我还是不知道怎么解决这个问题。现在我有一个按钮,当单击打开一个jquery模式对话框时,对话框中有一个twitterbootstrap向导,可以正常工作。我可以毫无问题地单击“下一步”和“上一步”按钮,现在当我尝试对其实现jquery验证时,它在文档中提供的示例不起作用。但是,如果我从对话框中删除引导向导并将其放在一个简单的页面中,验证就可以工作了。我不知道我的代码是否遗漏了什么或有什么问题。顺便说一句,我是在asp.NETWebForm页面中这样做的。

希望有人能帮我解决这个问题,已经快一天了,我还是不知道怎么解决这个问题。现在我有一个按钮,当单击打开一个jquery模式对话框时,对话框中有一个twitterbootstrap向导,可以正常工作。我可以毫无问题地单击“下一步”和“上一步”按钮,现在当我尝试对其实现jquery验证时,它在文档中提供的示例不起作用。但是,如果我从对话框中删除引导向导并将其放在一个简单的页面中,验证就可以工作了。我不知道我的代码是否遗漏了什么或有什么问题。顺便说一句,我是在asp.NETWebForm页面中这样做的。请参阅下面的代码:

头部

<link href="bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="prettify.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css" type="text/css" />

正文和Jquery脚本部分

<form id="form1" runat="server">
        <div id="dialog-form" title="Create new user">

  <form>
  <fieldset>
    <div id="rootwizard">
                            <div class="navbar">
                                <div class="navbar-inner">
                                    <div class="container">
                                        <ul>
                                            <li><a href="#tab1" data-toggle="tab">Login Account Information</a></li>
                                            <li><a href="#tab2" data-toggle="tab">Personal Information</a></li>
                                            <li><a href="#tab3" data-toggle="tab">List of Available Subjects</a></li>
                                        </ul>
                                    </div>
                                </div>
                            </div>
                            <div class="tab-content">
                                <div class="tab-pane" id="tab1">
                                    <asp:TextBox ID="emailfield" runat="server" CssClass="required email"></asp:TextBox>
                                </div>
                                <div class="tab-pane" id="tab2">
                                    2
                                </div>
                                <div class="tab-pane" id="tab3">
                                    3
                                </div>
                                <ul class="pager wizard">
                                    <li class="previous"><a href="#">Previous</a></li>
                                    <li class="next"><a href="#">Next</a></li>
                                </ul>
                            </div>  
                        </div>
  </fieldset>
  </form>

</div>
    <asp:Button ID="createuser" runat="server" Text="Button" />
    </form>
    <script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
    <script src="bootstrap.min.js" type="text/javascript"></script>
    <script src="jquery.bootstrap.wizard.js" type="text/javascript"></script>
    <script src="prettify.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var $validator = $("#form1").validate({
                rules: {
                    emailfield: {
                        required: true,
                        email: true,
                        minlength: 3
                    }
                }
            });

            $('#rootwizard').bootstrapWizard({
                onTabClick: function (tab, navigation, index) {
                    return false;
                },
                'onNext': function (tab, navigation, index) {
                    var $valid = $("#form1").valid();
                    if (!$valid) {
                        $validator.focusInvalid();
                        return false;
                    }
                }
            });
            window.prettyPrint && prettyPrint()
        });

        $(function () {
            $("#dialog-form").dialog({
                autoOpen: false,
                height: 500,
                width: 980,
                modal: true,
                resizable: false,
                draggable: false
            });

            $("#createuser")
            .button()
            .click(function () {
                $("#dialog-form").dialog("open");
            });
        });
    </script>

  • $(文档).ready(函数(){ var$validator=$(“#form1”).validate({ 规则:{ 电子邮件字段:{ 要求:正确, 电子邮件:是的, 最小长度:3 } } }); $(“#根向导”).bootstrapWizard({ onTabClick:功能(选项卡、导航、索引){ 返回false; }, “onNext”:函数(选项卡、导航、索引){ var$valid=$(“#form1”).valid(); 如果(!$有效){ $validator.focusInvalid(); 返回false; } } }); window.prettyPrint&&prettyPrint() }); $(函数(){ $(“#对话框窗体”).dialog({ 自动打开:错误, 身高:500, 宽度:980, 莫代尔:是的, 可调整大小:false, 可拖动:错误 }); $(“#createuser”) .按钮() 。单击(函数(){ $(“#对话框窗体”)。对话框(“打开”); }); });
    谢谢

    最初的想法。。。 我看到您有一个嵌套的表单元素,即一个表单放在另一个表单中。我会改变这一点,然后再试一次,看看是否有什么变化

    <form id="form1" runat="server">
        <div id="dialog-form" title="Create new user">
    
      <form>
    
    
    
    我怀疑这可能是问题的根源,因为根据规范,这是不允许的

    4.10.3表单元素

    类别流内容。可以使用此元素的上下文: 其中流内容是预期的。内容模型:流动内容,但具有 没有表单元素子体

    本质上,对内部表单的submit调用将在外部表单上触发-很可能会破坏验证,或者导致某种冲突

    关于这个主题有一个很好的话题——有人甚至引用了WebKit源代码中的一个方法,如果它不是现有方法的子方法,那么这个方法只会创建一个新的

    ... 嗯,有点。 在快速浏览了您向我展示的示例之后,有一件事跳出来了,这就是浏览器解释表单标记的方式:

    <form method="post" action="twitterwizardinsidejquerymodaldialog.aspx" id="form1" novalidate="novalidate">
      <div class="aspNetHidden">
        <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA3MzQyODM5NGRkGJwy+BJArQAbccGL8gkmxzW56BSXmxDbjmF1Bht/VZc=">
      </div>
    
      <div class="aspNetHidden">
      <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAANJ+VG2lcl0hLS1uBTEILjay9ZjNWlmWCE+F+bmmsDR55U8pUpLxmspHusBqybX31fKmP5z3oI1K/0xP04OEpQtSyYfoXmQEPT2tZ+zsIIvWQ==">
     </div>
    </form>
    
    
    
    不知何故,表单被截断了,这意味着验证确实通过了——因为从技术上讲,输入字段不存在。(表示自动跳过验证)

    如果您打开一个web检查器(即Google Chrome的开发工具)并手动将适当的元素拖到表单本身中,那么验证工作就完美了

    通过查看页面的源代码,您可以看到form元素在您尝试打开新表单的位置关闭:

    <form method="post" action="twitterwizardinsidejquerymodaldialog.aspx" id="form1">
      <div class="aspNetHidden">
        <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA3MzQyODM5NGRkGJwy+BJArQAbccGL8gkmxzW56BSXmxDbjmF1Bht/VZc=" />
      </div>
    
      <div class="aspNetHidden">
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAANJ+VG2lcl0hLS1uBTEILjay9ZjNWlmWCE+F+bmmsDR55U8pUpLxmspHusBqybX31fKmP5z3oI1K/0xP04OEpQtSyYfoXmQEPT2tZ+zsIIvWQ==" />
      </div>
      <div id="dialog-form" title="Create new user">  
    <form>
    
    
    
    这意味着什么? 很明显,表单的嵌套导致了这种情况,我会尝试删除内部表单——不知道它的用途,只是看起来有点毫无意义


    如果是这种情况,渲染引擎将关闭现有的表单元素,而不是打开新的表单元素。这也解释了为什么将向导放置在其他位置会允许它工作。

    #FergusMorrow当我单击按钮时,将调用对话框表单id。如果我删除div对话框表单中的另一个表单标记,模态对话框将打开几秒钟,然后自动关闭。有趣的是,当你在原始帖子中说“它不工作”时,实际发生了什么?验证是否失败或只是没有发生?#FergusMorrow当它不在模态对话框内时,验证发生。“下一步”按钮将停止并显示有错误的文本框。现在,当我将向导放在模式对话框中时,验证将不会发生。当我也用firebug检查它时,表单标签在对话框表单div中丢失了。稍后我将尝试发布一个JSFIDLE用于实时演示或从我的页面粘贴一个链接。是的,JSFIDLE案例将非常有用。我的意思是,如果firebug没有看到一个内部表单元素,那么它看起来并没有创建它,可能是因为嵌套。但这仍然不能解释一切,事实上,在对
    #form1
    运行验证时,它应该仍然有效;外形。#FergusMorrow请看ff林