2016-02-10 114 views
0

你好,感謝你的時間。阻止提交表單不工作,JavaScript

我有一個ID付款和提交按鈕的表單,但似乎在我的JavaScript中有一個錯誤,因爲我只收到警報消息,但如果我輸入一個錯誤的名稱散列符號#######。下面的代碼就是它在我的文件中的樣子。

// form validation, makes sure that the user inputs the correct data types.   

    function validateinput(event){ 

    var email = document.getElementById('email').value; 
    var firstname = document.getElementById('firstname').value; 
    var lastname = document.getElementById('lastname').value; 
    var message = document.getElementById('message').value; 

    var emailFilter = /^([a-zA-Z0-9_.-])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/; 
    var firstnameFilter = /^([" "a-zA-Z.-])+$/; 
    var lastnameFilter = /^([" "a-zA-Z.-])+$/; 
    var messageFilter = /^([" "a-zA-Z0-9_.-])+$/; 



    if (!emailFilter.test(email)) { 
    alert('!Enter a email. Or enter a valid email address.'); 
    document.getElementById('payment').addEventListener('onsubmit', function(event) {event.preventDefault();}); 
    return false; 
    } 

    if (!firstnameFilter.test(firstname)) { 
    alert('!Enter a first name. Or enter a valid name.'); 
    document.getElementById('payment').addEventListener('onsubmit', function(event) {event.preventDefault();}); 
    return false; 
    } 

    if (!lastnameFilter.test(lastname)) { 
    alert('!Enter a last name. Or enter a name., only letters'); 
    document.getElementById('payment').addEventListener('onsubmit', function(event) {event.preventDefault();}); 
    return false; 
    } 

    if (!messageFilter.test(message)) { 
    alert('!Enter a message.'); 
    document.getElementById('payment').addEventListener('onsubmit', function(event) {event.preventDefault();}); 
    return false; 
    } 

    alert ('Your order was submited') 

    } 

    document.getElementById('payment').addEventListener("submit", validateinput) 

也嘗試過其他方法,認爲他們似乎不太在本頁面上工作,但在其他人的作品?

如在此一個改變了var名稱和編號,S我用我的聯繫頁面上

function validateinput(event){ 
     var address1 = document.getElementById('address1').value; 
    var postcode = document.getElementById('postcode').value; 


    var address1Filter = /^([" "a-zA-Z0-9_.-])+$/; 
    var postcodeFilter = /^([" "a-zA-Z0-9_.-])+$/; 

    var formValid = true; 

    if (!address1Filter.test(address1)) { 
    alert('!Enter an address. Or enter a valid address., only letters and numbers'); 
    formValid = false; 
    event.preventDefault(); 
    return false; 
    } 

    if (!postcodeFilter.test(postcode)) { 
    alert('!Enter a postcode. Or enter a valid postcode., only letters and numbers'); 
    formValid = false; 
    event.preventDefault(); 
    return false; 
    } 


    alert ('Your order was submited') 

    } 

    document.getElementById('payment').addEventListener("submit", validateinput) 

那我做錯了嗎?

的HTML

<!doctype html> 

    <!-- name: Edwin martin -date: 30/11/2015 -task: a form with split up inputs using the 
    <fieldset> & <legend> tags --> 

    <html lang="en"> 


     <head> 
     <title>contact</title> 
     <script type="text/javascript" src="scripts/contact2.js"> </script> 
      <!-- ensures the document is using the correct char set --> 
       <meta charset="utf-8"> 
       <meta name="description" content="contact page"> 

       <link rel="icon" href="images/fav.png" type="image/png"/> 

      <!-- 
        The below section looks like a comment, but it's a conditional include statement. 
        It's ignored by all browsers except IE9. html5shiv is a library that fixes some HTML5 
        IE bugs. 
      --> 

       <!--[if lt IE 9]> 
       <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
       <![endif]--> 


        <!-- pulls in the styles sheet --> 
       <link rel="stylesheet" href="styles/indexstyles.css"> 


     </head> 


      <body onload="main()"> 


      <!-- start of the form, id form sets the position, size, border style and color --> 
      <div id="form2"> 

         <!-- sets the link position, list and text style of the header, id head color sets the background color for the division around the header --> 
         <div id="head"> 
          <header id="headcolor"> 
           <div id="toplinks"> 
            <ul> 
             <li class="tl"> <input type="button" class="topbutton" name="b1" value="Index" onclick="location.href='index.html'"> </li> 
             <li class="tl"> <input type="button" class="topbutton" name="b1" value="order" onclick="location.href='order.html'"> </li> 
            </ul> 
           </div> <br> 
             <br> 
          </header> 
          <h1 id="title"> Contact </h1> 
          <p> southampton solent pizzas: southampton solent university branch. E Park Terrace, Southampton, Hampshire SO14 0YN </p> 
         </div> 

         <div id="map"> </div> 


        <!-- id payment sets the input boxs background color , position and border for invaild - vaild --> 
        <form id="payment"> 
         <!-- Contact Information section --> 
          <fieldset> 
           <legend> Personal Information </legend> 
           <p> <label> First Name(*): </label> <input type="text" name="first_name" id="firstname" placeholder="enter a first name" class="add1"></p> 
           <p> <label> Last Name(*): </label> <input type="text" name="last_name" id="lastname" placeholder="enter a last name" class="add1"></p> 
           <p> <label> Email(*): </label> <input type="text" name="email" id="email" placeholder="enter a email" class="add1"></p> 
           <p> <label>Phone Number: </label> <input type="text" name="phone" id="phone"></p> 
           <p> <label> message(*): </label> <input type="text" name="message" id="message" placeholder="enter your message" class="add1"></p> 
          </fieldset> 


         <!-- Submit button --> 

           <input type="submit" class="submit_button"> 
           <input type="reset" class="reset_button"> 


        </form> 

      </div> 
       <script type="text/javascript" src="scripts/contact.js"> </script> 

       <script src="https://maps.googleapis.com/maps/api/js?callback=initMap" async defer></script> 
     </body> 
    </html> 

我也有另外一個JS腳本,你可以從兩個不同的鏈接查看。但即使我刪除鏈接 - 代碼有形成還與輸入錯誤提交,因爲這樣的代碼只是讀取一個空的輸入

//onload callback function 
function main() { 

console.log("in main function"); 
    var myForm = document.getElementById("payment"); 
    myForm.addEventListener("submit",validateForm); 
} 

//validate callback function 
function validateForm(event) { 
var formValid = true; 
var myForm = document.getElementById("payment"); 

if (myForm.first_name.value == "") { 
    formValid = false; 
    //display error message 
    document.getElementById("firstname").className += " formInvalid"; //add the class .formInvalid 
    //stop form from submitting 
    event.preventDefault(); 
} 

if (myForm.last_name.value == "") { 
    formValid = false; 
    //display error message 
    document.getElementById("lastname").className += " formInvalid"; //add the class .formInvalid 
    //stop form from submitting 
    event.preventDefault(); 
} 

if (myForm.email.value == "") { 
    formValid = false; 
    //display error message 
    document.getElementById("email").className += " formInvalid"; //add the class .formInvalid 
    //stop form from submitting 
    event.preventDefault(); 
} 

if (myForm.message.value == "") { 
    formValid = false; 
    //display error message 
    document.getElementById("message").className += " formInvalid"; //add the class .formInvalid 
    //stop form from submitting 
    event.preventDefault(); 
} 
} 
+0

我也有頁面中的另一個JS腳本,但即使我刪除它沒有區別,但在這裏。 – edwin

+1

爲什麼你在驗證函數中爲'onsubmit'添加一個事件處理程序,該函數本身是從'submit'事件調用的?這對我來說毫無意義。僅供參考,使用'.addEventListener()'時的事件名稱是'submit',而不是'onsubmit'。 – jfriend00

+0

http://stackoverflow.com/help/mcve – j08691

回答

0

document.getElementById('payment').addEventListener("submit", validateinput),問題是,你要一個參數傳遞給validateinput方法,但是你不能這麼做,爲了將參數傳遞給一個回調方法引用,你應該把它包裝在這樣的匿名函數中。

document.getElementById('payment').addEventListener("submit", function(event) { 
    validateinput(event); 
}); 
0

我認爲你是在你的Javascript複雜。如果您更改提交以直接調用該函數,則可以更輕鬆地處理負面狀態。

<input type="submit" onclick="return validateinput();" class="submit_button"> 

您將需要稍微修改validateinput函數,因爲您將不再有事件被傳遞。

+0

@edwin有很多方法可以用onclick調用多個函數。對於你我懷疑最好的可能是創建一個包裝函數並在其中調用每一個函數。如果其中任何一個內部函數都是false,則返回false。 – LAROmega