2011-08-22 2 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의 전체 내용을 대체하고 있습니다. 콜백을 바인딩 한 모든 요소가 포함되므로 콜백이 모두 손실됩니다. 그것은 #mail에 대한 작업으로 단지 onclick="return false;"으로 남겨서 양식이 죽었을 것입니다.

#body을 바꿀 때 콜백을 live 또는 delegate으로 바인딩하거나 모든 처리기를 리 바인드 할 수 있습니다.

1

당신은 버튼 (#mail)에 대한 이벤트 처리기를 바인딩, 아니면 그냥 live()를 사용해야합니다 :

여기에 코드입니다.

HTML로 다시로드하면 해당 요소에 바인딩 된 이벤트가 손실됩니다.

또한 p은 범위를 지정하지 않으므로 이됩니다 (사용자가 명시 적으로 빈 개체 리터럴에 다시 할당하지 않은 경우). var

항상 접두사 당신의 변수 정의는 정말 묵시적 글로벌 (99.9 %에게 시간이 그렇게하지)가 필요하지 않는 한. 바로 여기

관련 문제