2017-10-09 77 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 =函數()......