2012-12-03 42 views
2

有人可以帮我一个这个吗?我一直在使用jQuery进行验证,直到遇到与嵌入在PHP中的HTML表单相关的问题。jquery-validate - php嵌入式html表格

下面的例子是使用jQuery和jQuery验证。 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> 
+1

您是否尝试过检查最终的HTML源,看看形式看起来像您期望?尝试使用静态HTML和JavaScript创建[jsFiddle](http://jsfiddle.net/)。您需要确定该组合的哪部分不能正常工作,然后才能确保PHP输出您所需的内容。 – toxalot

+0

我能看到的唯一问题是仅限于Chrome。结束标记直接在

开始之后。然而,这不会发生在Firefox上,Firefox也不会验证form3。 Form3看起来相当不错,因为它看起来好像 – zeb

+0

请将HTML _as文件呈现在浏览器_中,这样我们至少可以拍摄一些东西。 – Sparky

回答

0

感谢您的帮助。管理由表外活动的形式标记它是由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>";