【问题标题】:jquery-validate - php embedded html formsjquery-validate - php 嵌入的 html 表单
【发布时间】:2012-12-03 09:46:19
【问题描述】:

有人可以帮我解决这个问题吗?在遇到嵌入在 php 中的 HTML 表单的问题之前,我一直在使用 jquery-validate 来解决 html 表单的问题。

下面的例子是使用 jquery 和 jquery-validate。 Form1 正在验证电子邮件字段。然而,Form3 并未验证数字字段(form3 嵌入在 php 中)。

我已尝试注释掉所有 form1 验证,以确保不是多个表单导致问题。

我还尝试将 form3 的 javascript 中的 submitHandler 注释掉,这阻止了 form3 提交,所以这告诉我有些东西正在工作,只是没有验证 form3 中的数字字段。

<script>
$(document).ready(function() {
    $("#form1").validate( {
        errorPlacement: function(error, element) {
            error.appendTo( element.parent("span").next("div") );
        },

        debug:true,
        wrapper: "li", 
        submitHandler: function(){
            form.submit();
        },
        rules: {                
            email: {required:false, email:true},
        },

        messages: {
            email: "Enter a valid email address",
        }
    })

    $("#form3").validate( {
        errorPlacement: function(error, element) {
            error.appendTo( element.parent("span").next("div") );
        },

        debug:true,
        wrapper: "li", 
        submitHandler: function(){
            form3.submit();
        },

        rules: {                
            quotaLimit: {required:true, number:true},
        },

        messages: {
            quotaLimit: "Enter a valid quota limit",
        }
    })
});
</script>

<br>

<div class="tab-button-row" style="position:relative;">
<a href="#" class="tab-button" onclick="toggleTab('editUserContent', 'details');">User Details</a>
<a href="#" class="tab-button" onclick="toggleTab('editUserContent','quotas');">Quota and Limits</a>
</div>
<br>

<div id="editUserContent">
<div id="details">
    <form id=form1 method=POST
          action="index.php?function=edituser&command=save&username=<?php echo $user->{"username"}; ?>"
          name=form>

        <?php
        if ($user->{'authenticationType'} == 0) {
            $visible = "";
        } else {
            $visible = "style='display:none;'";
        }
        ?>

        <table class="list">
            <tr>
                <td colspan=5><b>Edit Details</td>
                </td>
                <td width=25%><input type=submit value=save></td>
            </tr>

            <tr>
                <td>First Name:</td>
                <td>
                    <input name="fname" value="<?php echo $user->{"fname"};?>">
                </td>
                <td>Last Name:</td>
                <td>
                    <input name="lname" value="<?php echo $user->{"lname"};?>">
                </td>
                <td>Email:</td>
                <td>
                    <span>
                    <input name="email" value="<?php echo $user->{"email"};?>" class='validate'>
                    </span>
                <div></div>
                </td>
            </tr>
        </table>

        <br>
        <table class="list" <?php echo $visible; ?>>
            <tr>
                <td colspan=5><b>Password Settings</td>
                </td>
                <td width=25%><input type=submit value=save></td>
            </tr>
            <tr>
                <td>Set Password</td>
                <td><input type=checkbox name=change_password></td>
                <td>New Password:</td>
                <td><input name="password" type=password></td>
                <td>Re-enter Password:</td>
                <td><input name="re_password" type=password></td>
            </tr>
        </table>
    </form>
</div>

<div id="quotas">
    <?php
    $table = new Table();
    $name = new Column("Quota Period");
    $name->render = function($data, $id)
    {
        echo $data->{'period'};
    };

    $desc = new Column("Quota Limit(MB)");
    $desc->render = function($data, $id)
    {
        echo $data->{'quotaLimit'};
    };

    $owner = new Column("Group Owner");
    $owner->render = function($data, $id)
    {
        if (isset($data->{'owner'})) {
            echo "<a href=index.php?function=editgroup&group=" . $data->{'ownerid'} . ">" . $data->{'owner'} . "</a>";
        }
    };

    $reached = new Column("Quota Reached");
    $reached->render = function($data, $id)
    {
        if ($data->{'exceeded'} == true) {
            echo "true";
        } else {
            echo "false";
        }
    };

    $ops = new Column("Operations");
    $ops->render = function($data, $id)
    {
        if (!isset($quotas[$i]->{'owner'})) {
            echo "<a href=index.php?function=edituser&command=deletequota&username=" . $_GET['username'] . "&period=";
            echo $data->{'period'} . "&quotaLimit=" . $data->{'quotaLimit'} . ">delete</a>";
        }
    };

    $table->addColumn($name);
    $table->addColumn($desc);
    $table->addColumn($owner);
    $table->addColumn($reached);
    $table->addColumn($ops);
    $table->setData($quotas);
    $table->footerMethod = function($footerArgs)
    {
        echo" <form id=form3 method=POST action=index.php?function=edituser&command=addquota&username=" . $_GET['username'] . ">";
        echo "<tr><td>";
        echo "<select name='period'>";
        echo "<option>NONE</option>";
        echo "<option>DAY</option>";
        echo "<option>WEEK</option>";
        echo "<option>MONTH</option>";
        echo "</select>";
        echo "</td>";

        echo "<td>";
        echo "<span><input name=quotaLimit class='validate' /></span><div></div>";
        echo "</td>";

        echo "<td></td>";
        echo "<td></td>";
        echo "<td><input type=submit value='Add/Set'></td></tr>";
        echo "</form>";
    };

    $table->render();
    ?>

</div>
</div>

<script type="text/javascript">
initToggleTab("editUserContent", "details");
</script>

【问题讨论】:

  • 您是否尝试过检查最终 HTML 的来源以查看表单是否符合您的预期?尝试使用静态 HTML 和 JavaScript 创建jsFiddle。您需要确定该组合的哪个部分不起作用,然后您可以确保 PHP 输出您需要的内容。
  • 我能看到的唯一问题是只有 Chrome。 结束标记直接在
    开始之后。然而,这不会在 Firefox 上发生,而且 Firefox 也没有验证 form3。 Form3 在上面看起来很不错
  • 请发布 HTML 在浏览器中呈现的样子,这样我们至少可以尝试复制一些东西。
  • 提醒您不能将&lt;tr&gt; 标签嵌套在&lt;form&gt; 标签内。还可以考虑按照 W3C 的建议将 html 元素属性值放在引号之间。我真的试图重现您的问题,但在所有情况下,表格都会得到验证。如果你想得到答案,你应该考虑设置一个 jsFiddle。

标签: php javascript jquery html jquery-validate


【解决方案1】:

感谢您的帮助。设法通过将表格标签移动到由 php 呈现的位置来解决问题:

    $table->footerMethod = function($footerArgs)
    {
        echo "<tr><td>";
        echo "<select name='period'>";
        echo "<option>NONE</option>";
        echo "<option>DAY</option>";
        echo "<option>WEEK</option>";
        echo "<option>MONTH</option>";
        echo "</select>";
        echo "</td>";

        echo "<td>";
        echo "<span><input name=\"quotaLimit\" class=\"validate\" type='text' /></span><div></div>";
        echo "</td>";

        echo "<td></td>";
        echo "<td></td>";
        echo "<td><input type=submit value='Add/Set'></td></tr>";
    };

    echo" <form id=form3 method=POST action=index.php?function=edituser&command=addquota&username=" . $_GET['username'] . ">";
    $table->render();
    echo "</form>";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2016-07-17
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多