代码之家  ›  专栏  ›  技术社区  ›  Alessandro

内部表单上的JQuery验证(对话框)

  •  0
  • Alessandro  · 技术社区  · 9 年前

    我有一个带有 form 包括另一个带有 div (这是一个JQuery对话框)在这个对话框中,我有一个表单需要验证。

    我的问题是:我无法创建在对话框中打开的内部表单。因此,当我尝试验证它时,我得到以下错误: Uncaught TypeError: Cannot read property 'form' of undefined .

    请参阅以下代码段:

    <html>
    <head>  
      <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
      <link href="https://code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
      <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
      <script src="http://cdn.jsdelivr.net/jquery.validation/1.15.0/jquery.validate.min.js"></script>
    </head>
    <body>
      <form id="extForm">
        <div id="myDialog">
          <form id="intForm">
            <label for="field1">Don't write anything in textbox, just click the button</label>
            <input type="text" id="field1" required>
          </form>
        </div>
      </form>
    </body>
    <script>
      $("#myDialog").dialog({
        autoOpen: false,
        modal: true,
        title: "myDialog",
        buttons: {
          "Click me": function(){
            $("#myDialog form").valid();
          }
        }
      });
      $("#myDialog").dialog("open");
    </script>
    </html>

    如果我删除外部窗体,它工作正常。我能解决这个问题吗?谢谢

    注: 我无法删除外部表单,只能验证对话框中的字段。

    2 回复  |  直到 9 年前
        1
  •  1
  •   Blackcoat77 Sam Tyson    9 年前

    你会得到这个错误,因为当你打电话时 $("#myDialog").dialog() 函数,myDialog div从其内部html中丢失表单。

    请在对话框之后和打开对话框函数之前将html放回原处

    e、 x。

    <script>
        $("#myDialog").dialog({
            autoOpen: false,
            modal: true,
            title: "myDialog",
            buttons: {
                "Click me": function(){
                    $("#myDialog form").valid();
                }
            }
        });
    
    $("#myDialog").html("<form id='intForm'><label for='field1'>Don\'t write anything in textbox, just click the button</label><input type='text' id='field1' required></form>");
    
        $("#myDialog").dialog("open");
    </script>
    

    这段代码应该运行良好!

    非常感谢。

        2
  •  0
  •   Alessandro    9 年前

    我使用选项create解决了窗体内的包装对话框问题:

    创建:函数(){ formDialog=$(this.wrap($('').parent(); }

    这是结果:

    <html>
    <head>  
      <script src="https://code.jquery.com/jquery-3.1.1.js"></script>
      <link href="https://code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
      <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
      <script src="https://cdn.jsdelivr.net/jquery.validation/1.15.0/jquery.validate.min.js"></script>
    </head>
    <body>
      <form id="extForm">
        <div id="myDialog">
            <label for="field1">Don't write anything in textbox, just click the button</label>
            <input type="text" id="field1" required>
        </div>
      </form>
    </body>
    <script>
      var formDialog;
      $("#myDialog").dialog({
        autoOpen: false,
        modal: true,
        title: "myDialog",
        create: function(){
          formDialog = $(this).wrap($('<form>')).parent();
        },
        buttons: {
          "Click me": function(){
            formDialog.valid();
          }
        }
      });
      $("#myDialog").dialog("open");
    </script>
    </html>

    谢谢大家。