2017-10-09 72 views
-1

我正在做一个简单的应用程序在香草JavaScript中,我试图重置输入字段后,每次点击,但由于某种原因,它不会重新设置后,每次点击。输入字段不重置

它会在您点击输入字段后重置,但我想要的是输入字段在点击“添加”按钮后重置,而不必点击输入字段。

输入字段是不是里面<form>

这是我的功能,尝试重置输入字段

document.getElementById("task").onclick = function() { 
 
    Reset(); 
 
} 
 

 
function Reset() { 
 
    document.getElementById("task").value = null; 
 
}
<div class="row"> 
 
    <div class="col s12"> 
 

 
    <div class="input-field inline"> 
 

 
     <input id="task" type="text"> 
 

 
     <label for="email" data-error="wrong" data-success="right">Add a todo</label> 
 

 
    </div> 
 
    <a id="add" class="btn-floating btn-large waves-effect waves-light red"><i class="material-icons">add</i></a> 
 

 
    </div> 
 
</div>

现在这是问题因某种原因及其影响本地存储:

function getTodos(){ 
 
    var todos = new Array(); 
 
    var todos_str = localStorage.getItem('todo'); 
 
    if(todos_str !== null) { 
 
     todos = JSON.parse(todos_str); 
 
    } 
 
    return todos; 
 
} 
 
// Please do not use inline event handlers, use this instead: 
 
document.getElementById("add").onclick = function() { 
 
    Reset(); 
 
    } 
 
    
 
    function Reset() { 
 
    document.getElementById("task").value = null; 
 
    } 
 

 

 
function add(){ 
 
    var task = document.getElementById('task').value; 
 

 
    var todos = getTodos(); 
 
    todos.push(task); 
 
    localStorage.setItem('todo', JSON.stringify(todos)); 
 

 
    show(); 
 

 
    return false; 
 
} 
 

 
function remove() { 
 
    var id = this.getAttribute('id'); 
 
    var todos = getTodos(); 
 
    todos.splice(id, 1); 
 
    localStorage.setItem('todo', JSON.stringify(todos)); 
 

 
    show(); 
 

 
    return false; 
 
} 
 

 
function show() { 
 
    var todos = getTodos(); 
 

 
    var html = '<ul>'; 
 
    for(var i = 0; i < todos.length; i++) { 
 
     html += '<li>' + todos[i] + '<button class="remove" id="' + i + '"> x </button></li>'; 
 
    }; 
 
    html += '</ul>'; 
 
    document.getElementById('todos').innerHTML = html; 
 

 
    var buttons = document.getElementsByClassName('remove'); 
 
    for(var i = 0; i < buttons.length; i++){ 
 
     buttons[i].addEventListener('click', remove); 
 
    }; 
 
} 
 

 
document.getElementById('add').addEventListener('click', add); 
 

 
show();
<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
 
    <title>to do app</title> 
 
    <!--Import Google Icon Font--> 
 
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 
 
    <!--Import materialize.css--> 
 
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css"> 
 
    <!--Let browser know website is optimized for mobile--> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
 
</head> 
 
<body> 
 
      <div class="navbar-fixed"> 
 
       <nav> 
 
       <div class="nav-wrapper"> 
 
        <a href="#" class="brand-logo">Logo</a> 
 
        <ul id="nav-mobile" class="right hide-on-med-and-down"> 
 
        <li><a href="sass.html">Sass</a></li> 
 
        <li><a href="badges.html">Components</a></li> 
 
        <li><a href="collapsible.html">JavaScript</a></li> 
 
        </ul> 
 
       </div> 
 
       </nav> 
 
       </div> 
 
        
 

 
     <div class="row"> 
 
      <div class="col s12"> 
 
       
 
      <div class="input-field inline"> 
 
       
 
       <input class="reset-task" id="task" type="text"> 
 
       
 
       <label for="email" data-error="wrong" data-success="right">Add a todo</label> 
 
       
 
      </div> 
 
      <a id="add" class="btn-floating btn-large waves-effect waves-light red"><i class="material-icons">add</i></a>  
 
      
 
      </div> 
 
     </div> 
 

 
     <div id="todos"></div> 
 

 

 
    <script src="app.js"></script> 
 
    <!--Import jQuery before materialize.js--> 
 
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script> 
 
</body> 
 
</html>

+0

你确定你的JavaScript中的HTML调用后已经被解析。? – laruiss

+0

我把它作为一个片段,它实际上工作,你能提供一个非工作的例子吗? –

+2

这变成了一个无效的标记。因为它有重复的ID。 – Jai

回答

3

您的示例确实有效,但您只是使用了错误的ID。 使用添加ID而不是任务ID,一切都应该正常工作。

document.getElementById("add").onclick = function() { 
 
    Reset(); 
 
} 
 

 
function Reset() { 
 
    document.getElementById("task").value = null; 
 
}
<div class="row"> 
 
    <div class="col s12"> 
 

 
    <div class="input-field inline"> 
 

 
     <input id="task" type="text"> 
 

 
     <label for="email" data-error="wrong" data-success="right">Add a todo</label> 
 

 
    </div> 
 
    <a id="add" class="btn-floating btn-large waves-effect waves-light red"><i class="material-icons">add</i></a> 
 

 
    </div> 
 
</div>

+0

该解决方案的问题在于,它在每次点击后都会重置输入字段,但由于某种原因它不会添加待办事项。 :/ –

+0

添加todos是你在原始问题中没有提到的东西,我相信你应该接受这个答案,如果它解决了你的原始问题并且为此解决了原问题并且为此打开一个新线程。另请注意,该代码段是沙盒,因此localstorage在此不起作用。如果你说'它影响本地存储',我们不知道确切的问题/错误是什么。 – Wouter

0

好吧,它不是明确,你想要得到的点击事件触发的,所以我假设第一个选项是在身上,这样:

文件.body.addEventListener(“click”,Rest);

你“的document.getElementById(”任务“)的onclick。”应该帮助中,只有一个小窍门得到这个工作正常这里之前: Why is the onclick event on the body element not working?

它的东西,如果你喜欢的是他得到了什么元素触发click事件:

的document.getElementById( “添加”)的onclick =函数()......