2014-01-15 130 views
0

對於這個簡單的問題,我提前表示歉意,但是我遲到了,我不想睡覺,直到我開始工作爲止......並且我知道我的思維在最後幾個小時工作在其他部分。JS addEventListener不能正常工作

基本上,我只是想通過分配addEventListener來獲得提交按鈕來調用add()函數。當我點擊按鈕時,它會清除表單,但不會執行其他任何操作。如果我填寫這些字段,然後在Chrome的JS控制檯中調用add(),它可以完美地工作......顯然,事件偵聽器不會被添加到按鈕中,我不想在內聯中調用該函數。提前致謝。

HTML:

<ul> 
     <li> 
      <label for="firstname">First Name:</label> 
      <input type="text" id="firstname"/> 
     </li> 
     <li> 
      <label for="lastname">Last Name:</label> 
      <input type="text" id="lastname"/> 
     </li> 
     <li> 
      <label for="email">Email:</label> 
      <input type="text" id="email"/> 
     </li> 
     <li> 
      <label for="subject">Subject:</label> 
      <input type="text" id="subject"/> 
     </li> 
     <li> 
      <input type="submit" value="Save" id="btnSave"/> 
     </li> 
    </ul> 

JS:

var rolodex = localStorage.getItem('rolodex'); //load stored data if there is any 

window.onload = function() { 
    rolodex = JSON.parse(rolodex); 
    if(rolodex === null) { //if no data, initialize an empty array 
     rolodex = []; 
    } else { 
    console.log(rolodex); 
    } 
}; 

var add = function(){ 
    var SME = JSON.stringify({ 
     firstname:document.getElementById('firstname').value, 
     lastname:document.getElementById('lastname').value, 
     email:document.getElementById('email').value, 
     subject:document.getElementById('subject').value 
    }); 

    rolodex.push(SME); 
    localStorage.setItem('rolodex', JSON.stringify(rolodex)); 
    alert("Saved"); 
}; 

var submit = function(){ 
    var btnSave = document.getElementById('btnSave'); 
    btnSave.addEventListener('click', add(), false); 
}; 
+0

對不起,我不能在我的手機上覆制,但你有沒有嘗試隱式添加偵聽器提交。 –

回答

1

有人貼出了部分答案,然後刪除它,所以我會把我做了什麼。

  1. 固定add()被稱爲,而不是在addEventListener

  2. 刪除提交功能分配爲剛剛add,並把它的內容在window.onLoad功能,因此,它會被自動分配。

+0

你應該顯示修改後的版本。 – Barmar