在无序列表中单击加号图标时没有控制台日志输出

时间:2018-01-26 23:51:37

标签: javascript jquery html css twitter-bootstrap

我有一个ul(无序列表),其中包含几个li(列表项)当我点击左边的+符号li时,控制台日志应该输出“description expanded”对于前两个li,它工作得很好,但是不是任何其他的李。默认情况下,html代码仅包含2个li。之后的任何li都是通过表单添加的。但是,任何新的li都不会产生控制台日志输出。这意味着他们没有对点击做出回应。我正在使用jQuery来监听点击事件。单击图标时。 项目链接http://pctechtips.org/apps/todo/

//variables
//todoList array to hold (title, description) for every todo tiem
var todoList = []; //{title: "value", desc: "value"},
var numId = 2; //num is for desc paragraph id eg <p id="plus-3">

/*
 * Script main body
 */
 $(document).ready(function() { 
    //hide form when doc loads first time
    $("#submit-form").hide();
    //hide list item description <p>
    $(".item-desc").hide();

    //listener for show hide form functionality
     $("#add-todo").click(function() {
        toggleForm();
        return false; //return false to prevent page reload
     });

     //listener for add new item form (submit button)
     $(".btn").click(function() {
        console.log("submit item");
        addToList();
     });

     //listener for expanding li description
     $(".plus").click(function() {
        console.log("description expanded")
        var plusId = $(this).attr("id"); //grabbing id of plus sign
        showDescription(plusId);
        return false;
     });
 });

 //functionality for show / hide form
 function toggleForm() {
    if($("#submit-form").is(":hidden")) {
        console.log("form exapnded");
        $("#submit-form").show("slow");
        $("#form-icon").removeClass("fa-plus-square-o");
        $("#form-icon").addClass("fa-minus-square-o");
    }
    else {
        console.log("form hidden");
        $("#submit-form").hide("slow");
        $("#form-icon").removeClass("fa-minus-square-o");
        $("#form-icon").addClass("fa-plus-square-o");
    }   
 } 

 //add new item to todo list items
 function addToList() {
    numId++;
    //getting data from input fields
    var todoTitle = $("#todo-title").val();
    var todoDesc  = $("#todo-desc").val();
    //checking user input
    if(todoTitle == "" || todoDesc == "") {
        alert("fill in all fields!");
    }
    else {
        console.log(todoTitle + "\n" + todoDesc);
        //adding values to array
        todoList.push({title: todoTitle, desc: todoDesc},);
        //adding new li to ul   
        var ul = document.getElementById("list");
        var li = document.createElement("li");
        $(li).addClass("list-group-item justify-content-between align-items-center");
        $(li).append(($('<i id="plus-'+numId+'" class="plus fa fa-plus-square-o left" aria-hidden="true"></i>')));
        $(li).append(($('<span class="left marg-left">'+todoTitle+'</span>')));
        $(li).append(($('<i class="fa fa-trash-o right" aria-hidden="true"></i>')));
        $(li).append(($('<i class="fa fa-pencil right marg-right pr-2" aria-hidden="true"></i>')));
        ul.appendChild(li); 
    }   
 }

 //expanding description under for each todo
 function showDescription(plusId) {
    //getting the number from id
    var num = plusId.substring(plusId.indexOf("-")+1); 
    //checking for hide / show description paragraph
    if($("#desc-"+num).is(":hidden")) {
        $("#desc-"+num).show("slow");
        $("#desc-"+num).removeClass("fa-plus-square-o");
        $("#desc-"+num).addClass("fa-minus-square-o");
    }
    else {
        $("#desc-"+num).hide("slow");
        $("#desc-"+num).removeClass("fa-minus-square-o");
        $("#desc-"+num).addClass("fa-plus-square-o");
    }
 }

的index.html

<!DOCTYPE html>
<html>
<head>
    <title>TodoList App</title>
    <!-- bootstrap, fontawsome cdn -->
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
    <!-- local stylesheet -->
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <!-- jquery cdn -->
    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
    <!-- local javascript -->
    <script type="text/javascript" src="js/todo.js"></script>

</head>
<body>
    <!-- navbar -->
    <nav class="navbar navbar-expand-lg navbar-drak bg-dark mb-4">
          <a class="navbar-brand" href="#"><i class="fa fa-thumb-tack" aria-hidden="true"></i> Todo<strong>List</strong></a>
        </nav>
    <!-- /navbar -->
    <!-- todoList -->
    <div class="container">
        <div class="add-item text-white text-center col-sm-12 col-md-10 col-lg-8 mb-4">
        <a id="add-todo" class="new-todo text-white text-center" href=""><i id="form-icon" class="fa fa-plus-square-o" aria-hidden="true"></i> Enter new todo item</a>
        <div id="submit-form" class="form-hide text-center col-sm-12 col-md-12 col-lg-8">
            <form class="">
              <div class="form-group">
                <input type="text" class="form-control" id="todo-title" placeholder="Todo Title" value="Pay Car Insurance">        
              </div>
              <div class="form-group">
                <input type="text" class="form-control" id="todo-desc" placeholder="Todo Description" value="This is to pay car insurance">
              </div>
              <button type="button" class="btn btn-primary btn-lg col-12">Submit Todo</button>               
            </form>                 
        </div>
        <!-- horizontal line -->
            <hr>
        <!-- list items -->
        <h1 class="heading-4">Todo List Items</h1>
        <ul id="list" class="list-group mt-4 pb-4">
          <li class="list-group-item  justify-content-between align-items-center">
           <i id="plus-1" class="plus fa fa-plus-square-o left" aria-hidden="true"></i> 
           <span class="left marg-left">Pay Car Insurance </span>         
           <i class="fa fa-trash-o right" aria-hidden="true"></i>
           <i class="fa fa-pencil right marg-right pr-2" aria-hidden="true"></i>
         </li>
         <p id="desc-1" class="item-desc bg-white">Helloooooooooo this is description</p>
          <li class="list-group-item  justify-content-between align-items-center">
           <i id="plus-2" class="plus fa fa-plus-square-o left" aria-hidden="true"></i> 
           <span class="left marg-left">Pay Car Insurance </span><i class="fa fa-trash-o right" aria-hidden="true"></i>
           <i class="fa fa-pencil right marg-right pr-2" aria-hidden="true"></i>           
         </li>
         <p id="desc-2" class="item-desc bg-white">Helloooooooooo this is description</p>
        </ul>
    </div>  
    </div>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

使用

$(document).on("click", ".plus", function() {
    console.log("description expanded")
    var plusId = $(this).attr("id"); //grabbing id of plus sign
    showDescription(plusId);
    return false;
 });

而不是在文档加载时定义静态单击侦听器。

答案 1 :(得分:0)

对于动态添加的元素,可以在根/文档级别定义偶数侦听器。所以

$("class").on("click", function() { });

不起作用。它必须是

$(document).on("click", ".class", function() { });

感谢&#34; MADDY BLACKLISTED&#34;上面指出了正确的方向