2013-03-20 52 views
1

我試圖通過的onsubmit觸發JavaScript函數來驗證我的形式。表單的輸入類型=「提交」似乎並沒有觸發onsubmit處理

我知道函數本身的作品,因爲我可以在表單的標記後,立即script標籤內調用它,我收到我的console.log消息,並創建在表單上出現的錯誤消息。

的PHP驗證自己的作品,但我只能夠通過實際放置在一個div JavaScript的.submit提交表單。顯然,因爲這繞過了任何客戶端驗證,所以我不能這樣離開它,因此我用input type="submit"替換了我的div id="submit"

我一直在尋找其他的例子,包括我自己編碼的,我知道的工作,完全好像出答案的過去式。這可能非常容易,出於某種原因,我不能也不能在過去6個小時內看到它。 O_O

這裏是我的窗體的標記:的onsubmit="return validateForm();" -with或沒有分號

<form name="emailus" id="emailus" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="return validateForm();"> 
    <a href="mailto:[email protected]"> 
     <h3><i class="icon-envelope-alt icon-large"></i>Send us an email<span>: [email protected]</span></h3> 
    </a> 

    <div class="half"> 
     <fieldset class="name"> 
      <label for="cf_name"><h4>Name <span>*</span></h4></label> 
      <input type="text" name="cf_name" class="textualformfield" alt="Jane Doe" pattern="^[a-zA-Z'\s]+$"> 
     </fieldset> 
     <fieldset class="emailaddress"> 
      <label for="cf_email"><h4>E-mail <span>*</span></h4></label> 
      <input type="text" name="cf_email" class="textualformfield" alt="[email protected]" pattern="{long string of regex}"> 
     </fieldset> 
     <fieldset class="phonenumber"> 
      <label for="cf_phonenumber"><h4>Phone</h4></label> 
      <input type="tel" name="cf_phonenumber" class="textualformfield" alt="555-555-5555"> 
     </fieldset> 
     <fieldset class="eventdate"> 
      <label for="cf_eventdate"><h4>Event Date</h4></label> 
      <input type="text" name="cf_eventdate" class="textualformfield" alt="May 25th, 2012"> 
     </fieldset> 
     <fieldset class="location"> 
      <label for="cf_location"><h4>Location</h4></label> 
      <input type="text" name="cf_location" class="textualformfield" alt="The Church"> 
     </fieldset> 
    </div> 

    <div class="half"> 
     <textarea name="cf_message" class="textualformfield" alt="Your Message"></textarea> 
    </div> 

    <input type="submit" for="emailus" name="submit" id="submit" value="Submit"> 
</form> 

我已經嘗試幾種不同的迭代,寫它作爲onSubmitonsubmit ...我不知道。我根本看不出這有什麼問題。任何人?

以下被稱爲onsubmitvalidateForm功能。它位於另一個文件中,但該文件始終包含在表單中,並且我確信此函數不在$(document).ready之內,並且可以在全局範圍內使用,因爲我已經在表單後直接從腳本標記中調用它。

var validateForm = function() { 
    var valid = true; 

    jQuery('p.validationhelpers').remove(); 

    if (document.emailus.cf_email.value == "" || document.emailus.cf_email.value == "[email protected]") { 
     jQuery('.emailaddress').append("<p class='validationhelpers'>Please enter an email address.</p>"); 
     jQuery('.emailaddress>input').focus(); 
     valid = false; 
    } 

    if (document.emailus.cf_name.value == "" || document.emailus.cf_name.value == "Jane Doe") { 
     jQuery('.name').append("<p class='validationhelpers'>Please enter your name.</p>"); 
     jQuery('.name>input').focus(); 
     valid = false; 
    } 
    console.log("I was triggered"); 

    return valid; 
} 

編輯2:增加PHP驗證/郵編:

<?php if (!empty($_POST)) { 
    $field_name = $_POST['cf_name']; 
    $field_email = $_POST['cf_email']; 
    $field_phone = $_POST['cf_phonenumber']; 
    $field_eventdate = $_POST['cf_eventdate']; 
    $field_location = $_POST['cf_location']; 
    $field_message = $_POST['cf_message']; 

    $mail_to = '[email protected]'; 

    //final attempt at validation or email submission preventation 
    if ($field_name == "Jane Doe" || empty($field_name) || $field_email == "[email protected]" || empty($field_email)) { 
     return false; 
    } 


    if (!($field_eventdate == "May 25th, 2012") && !empty($field_eventdate) && !($field_name == "Jane Doe") && !empty($field_name)) { 
     $subject = 'Request for '.$field_date. ' from '.$field_name . 'via thiswebsite.com'; 
    } else { 
     $subject = $field_name . ' has contacted you via thiswebsite.com'; 
    } 

    if (!($field_name == "Jane Doe") && !empty($field_name)) { 
     $body_message = 'Client\'s Name: '.$field_name."\n\n"; 
    } 
    if (!($field_email == "[email protected]") && !empty($field_email)) { 
     $body_message .= 'E-mail: '.$field_email."\n\n"; 
    } 
    if (!($field_phone == "555-555-5555") && !empty($field_phone)) { 
     $body_message .= 'Phone: '.$field_phone."\n\n"; 
    } 
    if (!($field_eventdate == "May 25th, 2012") && !empty($field_eventdate)) { 
     $body_message .= 'Event Date: '.$field_eventdate."\n\n"; 
    } 
    if (!($field_location == "The Church") && !empty($field_location)) { 
     $body_message .= 'Location: '.$field_location."\n\n"; 
    } 
    if (!($field_message == "Your Message") && !empty($field_message)) { 
     $body_message .= 'Message: '. "\n".$field_message; 
    } 

    $headers = 'From: '.$field_email."\r\n"; 
    $headers .= 'Reply-To: '.$field_email."\r\n"; 

    $mail_status = mail($mail_to, $subject, $body_message, $headers); 

    $body_message = stripslashes($body_message); 

    if ($mail_status) { ?> 
     <script language="javascript" type="text/javascript"> 
      jQuery(document).ready(function() { 
       jQuery('#contactus').before("<hr class='confirmationhelpers'><p class='confirmationhelpers'>Your e-mail has been sent!<br/>Thank you! We'll contact you shortly.</p><hr class='confirmationhelpers'>"); 
      }); 
     </script> 
    <?php 
    } 
    else { ?> 
     <script language="javascript" type="text/javascript"> 
      jQuery(document).ready(function() { 
       alert('It seems there\'s been an error. Please, send an email to [email protected] to request your appointment.'); 
      }); 
     </script> 
    <?php 
    } 
} 

?> 

只是要清楚,當我點擊提交按鈕,絕對沒有任何反應。

+0

你可以發佈你的提交() – 2013-03-20 09:53:08

+0

和validateForm – 2013-03-20 09:53:23

+0

嘗試並刪除'onsubmit'值的'return',並簡單地把'validateForm()',或者更好的:'validateForm();返回false;'如果前者不返回真值或僞造值。順便說一下,提交輸入中使用'for'有什麼用途? – 2013-03-20 09:56:10

回答

2

你jQuery是阻止表單提交這裏:

//this hides the contact form if the overlay is clicked. children is there to prevent the children from also having this effect. 
    $('.overlay_vertical_align').click(function() { 
     $('.grey_overlay').fadeOut('slow'); 
    }).children().click(function(e) { 
     return false; 
    }); 

我的意思是,當我調試您的網站,並按下提交按鈕,我到達上面的return false;,在此之後,事件處理結束。 (),

+1

另外,如果你希望你的validateForm函數能夠防止提交無效表單,那麼它**必須是'onsubmit =「return validateForm()」'。 – 2013-03-20 11:45:56

+0

您先生,贏得獎品。 請問你是如何調試到這個級別的?您使用的是什麼瀏覽器或工具?感謝您讓我走上正軌。 – aminimalanimal 2013-03-20 12:06:00

+1

@aminimalanimal我使用了Chrome的開發者工具(Ctrl + Shift + I),腳本調試器位於'Sources'視圖。我稍微偏好Internet Explorer的開發工具(F12)來逐步調試JavaScript代碼,但在這種情況下,頁面甚至不會加載(IE8/XP) - 除此之外,它可以方便地在每個瀏覽器中調試腳本。所以我暫停了所有的腳本執行,然後點擊提交按鈕,並逐步瀏覽代碼(jQuery內部不容易遵循,所以我只是按下了腳步,直到我終於到達您的代碼)。 – 2013-03-20 13:30:17

0

的任何原因的情況是,您使用新的HTML5「模式」它試圖正則表達式驗證您輸入它甚至達到你的驗證功能之前的屬性。刪除模式屬性並重試。

+0

嗯...好猜,但我剛剛刪除它,似乎並不是這樣。我之前也成功地使用了'pattern'屬性以及javascript驗證,並且它似乎沒有妨礙我的工作,儘管我確實記得它在某些時候是先例。 – aminimalanimal 2013-03-20 11:17:44

相關問題