2014-01-15 133 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