2011-08-22 55 views
1

所以我已經做了幾次,它已經工作,但由於某種原因,我的表單這次不會工作。當我提交表單時,jQuery使用mail.php來做一個最終的驗證。然後它提交或回顯錯誤。爲什麼我的jQuery表單不能重新提交?

因此,基本上,當我提交帶有錯誤的表單時,它會用相應的錯誤回顯它,但是當我更正這些值並嘗試重新提交時,它將不會重新提交。

下面的代碼:

<html> 
<head> 
    <title>Contact Form Example</title> 
    <script type="text/javascript" src="js/jquery.js"></script> 

    <script type="text/javascript"> 
     $(document).ready(function() { 

      $('#email').keypress(function() { 
       p = {}; 
       p['email'] = document.getElementById("email").value; 
       $("#emailcheck").load("validate_email.php", p); 
      }); 

      $('#message').keypress(function() { 
       p = {}; 
       p['message'] = document.getElementById("message").value; 
       $("#messagecheck").load("validate_message.php", p); 
      }); 

       $('#mail').click(function() { 

        p = {}; 
        p['email'] = document.getElementById("email").value; 
        p['message'] = document.getElementById("message").value; 
        $("#body").load("mail.php", p); 

       }); 

     }); 
    </script> 

</head> 
<body> 

    <table style="display: block;" id="body"> 
     <form action="mail.php" method="POST"> 
     <tr> 
      <td align="right"> 
       <label for="email">Email:</label> 
      </td> 
      <td align="left"> 
       <input type="text" name="email" id="email" /> 
      </td> 
      <td id="emailcheck"></td> 
     </tr> 
     <tr> 
      <td align="right" valign="top"> 
       <label for="message">Message:</label> 
      </td> 
      <td align="left"> 
       <textarea rows="5" cols="30" name="message" id="message"></textarea> 
      </td> 
      <td id="messagecheck"></td> 
     </tr> 
     <tr> 
      <td></td><td><input id="mail" type="submit" value="Email" onclick="return false;"/></td> 
     </tr> 
     </form> 
    </table> 

</body> 

+0

mail.php返回什麼? – swordfish

+0

你確定mail.php不只是拋出一個錯誤嗎?如果出現問題,錯誤處理很少 –

回答

2

就在這裏:

$("#body").load("mail.php", p); 

你更換整個內容#body。這包括所有綁定回調的元素,所有這些回調都會丟失。這可能只是onclick="return false;"作爲#mail的行動,所以你的表單已經死了。

當您替換#body時,您可以將您的回調與livedelegate綁定或重新綁定您的所有處理程序。

1

您需要重新綁定的事件處理程序的按鈕(#mail),或者只是使用live()

當您重新載入HTML時,綁定到該元素的事件將丟失。

此外,p沒有作用域的功能,因此堅持這些屬性,(你有沒有明確其重新分配給一個空的對象文本)。

總是var爲變量定義的前綴,除非您真的需要隱含的全局(99.9%的時間您不需要)。

相關問題