2017-02-18 38 views
1

單擊列表項目內的span時隱藏列表項目的最佳方法是什麼?我已經包含下面的代碼。我正在嘗試構建待辦事項列表應用程序,並且我試圖編寫一個腳本,用於在用戶單擊紅色「X」文本時刪除/隱藏從結果列表中完成的任務。點擊span元素時如何隱藏列表項目

\t 
 
\t var submitTask = $("#display-taskList"); 
 
\t var taskList = $("#taskList"); 
 
\t var submitTask = $("#submit-task"); 
 
\t var list = "<li>" + inputTask + "</li>" 
 
\t \t var inputTask = $("#inputTask").val(); 
 

 
\t \t submitTask.click(function(event) { 
 
\t \t event.preventDefault(); 
 
\t \t var inputTask = $("#inputTask").val(); 
 
\t \t var list = "<li>" + inputTask + "</li>" 
 

 
\t \t \t if (inputTask === "") { 
 
\t \t \t \t alert("Add a task") 
 
\t \t \t } 
 

 
\t \t \t else{ 
 
\t \t \t \t $("ol").append("<li>" + $("#inputTask").val() + "<span id='close'>" + "x" +"</span>" + "</li>"); 
 
\t \t \t } 
 

 

 
\t }); 
 

 
\t \t function doneTask(){ 
 
\t \t \t var x = $('#listResult'); 
 
\t $(x).click(function(e) { 
 
\t \t if (e.target.tagName === 'SPAN'){ 
 
\t \t var y =$("#close"); 
 
\t \t var n = $(y).closest('li') 
 
     return n.style.visibility = "hidden"; 
 
\t }; 
 
\t \t }); 
 
\t } 
 

 
\t doneTask(); 
 
\t \t \t
\t html,body { height: 100%; margin: 0px; padding: 0px; } 
 
\t \t body{ 
 
\t \t \t background: #F3904F; /* fallback for old browsers */ 
 
\t \t \t background: -webkit-linear-gradient(to left, #F3904F , #3B4371); /* Chrome 10-25, Safari 5.1-6 */ 
 
\t \t \t background: linear-gradient(to left, #F3904F , #3B4371); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ 
 
     
 
\t \t } 
 

 
\t \t #center-block { 
 
\t \t  width:600px; 
 
\t \t  height: 100%; 
 
\t \t  padding:10px; 
 
\t \t  background: #F3904F; /* fallback for old browsers */ 
 
\t \t \t background: -webkit-linear-gradient(to left, #F3904F , #3B4371); /* Chrome 10-25, Safari 5.1-6 */ 
 
\t \t \t background: linear-gradient(to left, #F3904F , #3B4371); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ 
 
\t \t } 
 

 
\t \t #inputTask{ 
 
\t \t width: 530px; 
 
\t \t height: 44px; 
 
\t \t margin-left: 30px; 
 
\t \t font: 16px arial,sans-serif; 
 
    \t line-height: 34px; 
 
    \t \t height: 34px !important; 
 
    \t \t margin-top: 20px; 
 
    \t \t margin-bottom: 25px 
 
    \t \t ; 
 
\t \t } 
 

 
\t \t input[type=text]{ 
 
\t \t \t background-color: #3B4371; 
 
\t \t \t font-family: 'Ubuntu', sans-serif; 
 
\t \t } 
 

 
\t \t input[type=text]:focus { 
 
    \t background-color: #fff; 
 
    \t font-family: 'Ubuntu', sans-serif; 
 
    \t box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); 
 
    \t border: 3px solid #555;: 
 
\t \t } 
 

 
\t \t #title{ 
 
\t \t color: #fff; 
 
\t \t font-family: 'Ubuntu', sans-serif; 
 
\t \t text-transform: capitalize; 
 
\t \t } 
 

 
\t \t hr{ 
 
\t \t \t width: 50; 
 
\t \t } 
 

 
\t \t button{ 
 
\t \t margin-top: 10px; 
 
\t \t opacity: 0.5; 
 
\t \t cursor: default; 
 
\t  font-family: arial,sans-serif; 
 
\t  font-size: 15px; 
 
\t  font-weight: bold; 
 
\t  margin: 5px 30px 10px 30px; 
 
\t  min-width: 54px; 
 
\t  height: 30px; 
 
\t  padding: 0 16px; 
 
\t  text-align: center; 
 
\t \t } 
 

 
\t \t ol > li { 
 
\t \t \t color: #fff; 
 
\t \t \t font-family: sans-serif; 
 
\t \t \t font-size: 20px; 
 
\t \t \t background-color: #A9A9A9; 
 
\t \t \t margin-top: 5px; 
 
\t \t \t padding-left: 5px; 
 
\t \t } 
 
\t \t 
 
\t \t 
 
\t \t li:hover{ 
 
\t \t \t background: #808080; 
 
\t \t \t cursor: pointer; 
 
\t \t } 
 

 
\t \t .strike{ 
 
\t \t \t text-decoration: line-through; 
 
\t \t } 
 

 
\t \t #close{ 
 
\t \t \t color: red; 
 
\t \t \t font-size: 30px; 
 
\t \t }
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<body> 
 
<div class="container" id="center-block"> 
 
<div class="row"> 
 
\t <form> 
 
\t \t <h1 class="text-center" id="title">Simple to-Do list</h1> 
 
\t \t <hr width="50%"> 
 
\t \t <input type="text" id="inputTask" name="" placeholder="Title..."> 
 
\t \t <button id="submit-task">Hit Me!</button> 
 
\t \t <!-- <button id="submit-task">Clear List</button> --> 
 
\t 
 
\t 
 
\t <div id="display-taskList"> 
 
\t \t <h3 style="color: #fff; font-family: 'Kanit';"> Task to accomplish</h3> 
 
\t \t <ol id="listResult"></ol> 
 
\t \t </div> 
 
\t  </form> 
 
    </div> 
 
    </div> 
 
</body>

+0

只是爲了解決你的問題。 ['closest'](https://api.jquery.com/closest/)函數返回一個數組。因此'return n.style.visibility =「hidden」'將會失效,因爲這裏的'n'是一個數組而不是一個對象。使用'return n [0] .style.visibility =「hidden」'來隱藏項目。這就是說 - 有很多更好的方法來解決這個問題。你可以按照我的朋友給出的任何一個。 –

+0

謝謝@NikhilNanjappa我認爲你有最好的解釋。我真的很明白我寫的東西。 –

回答

1

一個很好的辦法解決這個問題將被綁定click事件的每一個span元素。如果用戶點擊它,則隱藏點擊的span元素的父級。

編輯:如果您單擊並添加新的todo,則立即清除輸入。

var submitTask = $("#display-taskList"); 
 
var taskList = $("#taskList"); 
 
var submitTask = $("#submit-task"); 
 
var list = "<li>" + inputTask + "</li>" 
 
var inputTask = $("#inputTask").val(); 
 

 
submitTask.click(function(event) { 
 
    event.preventDefault(); 
 
    var inputTask = $("#inputTask").val(); 
 
    var list = "<li>" + inputTask + "</li>" 
 

 
    if (inputTask === "") { 
 
    alert("Add a task") 
 
    } else { 
 
    $("ol").append("<li>" + $("#inputTask").val() + "<span id='close'>" + "x" + "</span>" + "</li>"); 
 
    $('#inputTask').val(null); 
 
    } 
 

 
    $('#listResult').find('span').click(function() { 
 
    $(this).parent().hide(); 
 
    }); 
 

 
});
html, 
 
body { 
 
    height: 100%; 
 
    margin: 0px; 
 
    padding: 0px; 
 
} 
 

 
body { 
 
    background: #F3904F; 
 
    /* fallback for old browsers */ 
 
    background: -webkit-linear-gradient(to left, #F3904F, #3B4371); 
 
    /* Chrome 10-25, Safari 5.1-6 */ 
 
    background: linear-gradient(to left, #F3904F, #3B4371); 
 
    /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ 
 
} 
 

 
#center-block { 
 
    width: 600px; 
 
    height: 100%; 
 
    padding: 10px; 
 
    background: #F3904F; 
 
    /* fallback for old browsers */ 
 
    background: -webkit-linear-gradient(to left, #F3904F, #3B4371); 
 
    /* Chrome 10-25, Safari 5.1-6 */ 
 
    background: linear-gradient(to left, #F3904F, #3B4371); 
 
    /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ 
 
} 
 

 
#inputTask { 
 
    width: 530px; 
 
    height: 44px; 
 
    margin-left: 30px; 
 
    font: 16px arial, sans-serif; 
 
    line-height: 34px; 
 
    height: 34px !important; 
 
    margin-top: 20px; 
 
    margin-bottom: 25px; 
 
} 
 

 
input[type=text] { 
 
    background-color: #3B4371; 
 
    font-family: 'Ubuntu', sans-serif; 
 
} 
 

 
input[type=text]:focus { 
 
    background-color: #fff; 
 
    font-family: 'Ubuntu', sans-serif; 
 
    box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); 
 
    border: 3px solid #555; 
 
    : 
 
} 
 

 
#title { 
 
    color: #fff; 
 
    font-family: 'Ubuntu', sans-serif; 
 
    text-transform: capitalize; 
 
} 
 

 
hr { 
 
    width: 50; 
 
} 
 

 
button { 
 
    margin-top: 10px; 
 
    opacity: 0.5; 
 
    cursor: default; 
 
    font-family: arial, sans-serif; 
 
    font-size: 15px; 
 
    font-weight: bold; 
 
    margin: 5px 30px 10px 30px; 
 
    min-width: 54px; 
 
    height: 30px; 
 
    padding: 0 16px; 
 
    text-align: center; 
 
} 
 

 
ol>li { 
 
    color: #fff; 
 
    font-family: sans-serif; 
 
    font-size: 20px; 
 
    background-color: #A9A9A9; 
 
    margin-top: 5px; 
 
    padding-left: 5px; 
 
} 
 

 
li:hover { 
 
    background: #808080; 
 
    cursor: pointer; 
 
} 
 

 
.strike { 
 
    text-decoration: line-through; 
 
} 
 

 
#close { 
 
    color: red; 
 
    font-size: 30px; 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 

 
<body> 
 
    <div class="container" id="center-block"> 
 
    <div class="row"> 
 
     <form> 
 
     <h1 class="text-center" id="title">Simple to-Do list</h1> 
 
     <hr width="50%"> 
 
     <input type="text" id="inputTask" name="" placeholder="Title..."> 
 
     <button id="submit-task">Hit Me!</button> 
 
     <!-- <button id="submit-task">Clear List</button> --> 
 

 

 
     <div id="display-taskList"> 
 
      <h3 style="color: #fff; font-family: 'Kanit';"> Task to accomplish</h3> 
 
      <ol id="listResult"></ol> 
 
     </div> 
 
     </form> 
 
    </div> 
 
    </div> 
 
</body>

+0

它的工作原理!並感謝您的改進,我的意思是明確的輸入功能。 –

+0

@SopeIsaacOrija我的榮幸。如果你想你可以upvote我的回答:) –

+0

我已經做到了。再次感謝。 –

0

您可以使用下面的方法:

  • 使用jQuery .hide()方法。 n.hide();
  • 使用jQuery的.css( 「顯示」, 「無」)方法 n.css( 「顯示」, 「無」)
0

您可以嘗試在跨度使用類。

<span class="revovable"> 

$('.removable').on('click', function(){ 
    $(this).hide(); 
    //if you want to remove the element you can use this 
    $(this).remove(); 
}) 
0

你想使用JQuery的css不風格。它允許您設置像.css('key', 'value')

屬性在這種情況下,我設置.css('display', 'none')

\t 
 
\t var submitTask = $("#display-taskList"); 
 
\t var taskList = $("#taskList"); 
 
\t var submitTask = $("#submit-task"); 
 
\t var list = "<li>" + inputTask + "</li>" 
 
\t \t var inputTask = $("#inputTask").val(); 
 

 
\t \t submitTask.click(function(event) { 
 
\t \t event.preventDefault(); 
 
\t \t var inputTask = $("#inputTask").val(); 
 
\t \t var list = "<li>" + inputTask + "</li>" 
 

 
\t \t \t if (inputTask === "") { 
 
\t \t \t \t alert("Add a task") 
 
\t \t \t } 
 

 
\t \t \t else{ 
 
\t \t \t \t $("ol").append("<li>" + $("#inputTask").val() + "<span id='close'>" + "x" +"</span>" + "</li>"); 
 
\t \t \t } 
 

 

 
\t }); 
 

 
\t \t function doneTask(){ 
 
\t \t \t var x = $('#listResult'); 
 
\t $(x).click(function(e) { 
 
\t \t if (e.target.tagName === 'SPAN'){ 
 
     $(e.target).closest('li').css('display', 'none'); 
 
\t }; 
 
\t \t }); 
 
\t } 
 

 
\t doneTask(); 
 
\t \t \t
\t html,body { height: 100%; margin: 0px; padding: 0px; } 
 
\t \t body{ 
 
\t \t \t background: #F3904F; /* fallback for old browsers */ 
 
\t \t \t background: -webkit-linear-gradient(to left, #F3904F , #3B4371); /* Chrome 10-25, Safari 5.1-6 */ 
 
\t \t \t background: linear-gradient(to left, #F3904F , #3B4371); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ 
 
     
 
\t \t } 
 

 
\t \t #center-block { 
 
\t \t  width:600px; 
 
\t \t  height: 100%; 
 
\t \t  padding:10px; 
 
\t \t  background: #F3904F; /* fallback for old browsers */ 
 
\t \t \t background: -webkit-linear-gradient(to left, #F3904F , #3B4371); /* Chrome 10-25, Safari 5.1-6 */ 
 
\t \t \t background: linear-gradient(to left, #F3904F , #3B4371); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ 
 
\t \t } 
 

 
\t \t #inputTask{ 
 
\t \t width: 530px; 
 
\t \t height: 44px; 
 
\t \t margin-left: 30px; 
 
\t \t font: 16px arial,sans-serif; 
 
    \t line-height: 34px; 
 
    \t \t height: 34px !important; 
 
    \t \t margin-top: 20px; 
 
    \t \t margin-bottom: 25px 
 
    \t \t ; 
 
\t \t } 
 

 
\t \t input[type=text]{ 
 
\t \t \t background-color: #3B4371; 
 
\t \t \t font-family: 'Ubuntu', sans-serif; 
 
\t \t } 
 

 
\t \t input[type=text]:focus { 
 
    \t background-color: #fff; 
 
    \t font-family: 'Ubuntu', sans-serif; 
 
    \t box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); 
 
    \t border: 3px solid #555;: 
 
\t \t } 
 

 
\t \t #title{ 
 
\t \t color: #fff; 
 
\t \t font-family: 'Ubuntu', sans-serif; 
 
\t \t text-transform: capitalize; 
 
\t \t } 
 

 
\t \t hr{ 
 
\t \t \t width: 50; 
 
\t \t } 
 

 
\t \t button{ 
 
\t \t margin-top: 10px; 
 
\t \t opacity: 0.5; 
 
\t \t cursor: default; 
 
\t  font-family: arial,sans-serif; 
 
\t  font-size: 15px; 
 
\t  font-weight: bold; 
 
\t  margin: 5px 30px 10px 30px; 
 
\t  min-width: 54px; 
 
\t  height: 30px; 
 
\t  padding: 0 16px; 
 
\t  text-align: center; 
 
\t \t } 
 

 
\t \t ol > li { 
 
\t \t \t color: #fff; 
 
\t \t \t font-family: sans-serif; 
 
\t \t \t font-size: 20px; 
 
\t \t \t background-color: #A9A9A9; 
 
\t \t \t margin-top: 5px; 
 
\t \t \t padding-left: 5px; 
 
\t \t } 
 
\t \t 
 
\t \t 
 
\t \t li:hover{ 
 
\t \t \t background: #808080; 
 
\t \t \t cursor: pointer; 
 
\t \t } 
 

 
\t \t .strike{ 
 
\t \t \t text-decoration: line-through; 
 
\t \t } 
 

 
\t \t #close{ 
 
\t \t \t color: red; 
 
\t \t \t font-size: 30px; 
 
\t \t }
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<body> 
 
<div class="container" id="center-block"> 
 
<div class="row"> 
 
\t <form> 
 
\t \t <h1 class="text-center" id="title">Simple to-Do list</h1> 
 
\t \t <hr width="50%"> 
 
\t \t <input type="text" id="inputTask" name="" placeholder="Title..."> 
 
\t \t <button id="submit-task">Hit Me!</button> 
 
\t \t <!-- <button id="submit-task">Clear List</button> --> 
 
\t 
 
\t 
 
\t <div id="display-taskList"> 
 
\t \t <h3 style="color: #fff; font-family: 'Kanit';"> Task to accomplish</h3> 
 
\t \t <ol id="listResult"></ol> 
 
\t \t </div> 
 
\t  </form> 
 
    </div> 
 
    </div> 
 
</body>

+0

謝謝@卡洛。這也適用。不過,現在我想在列表項上添加一個風格。我可以使用相同的方法做到這一點嗎? –

+0

你可以。只需將文本修飾設置爲直通。 – Carlo

+0

嗨@carlos我這樣做了,但現在它也影響了「X」。 (){var list =「#listResult」);}}函數strike(){ \t var x = $(「#listResult」); \t $(x).click(function(event){ \t if(event.target。tagName ===「LI」){ \t \t $(event.target).css(「text-decoration」,「line-through」); \t \t} }); \t}' –