javascript - 将 onclick() 函数添加到使用 DOM 操作创建的复选框并将其作为参数传递

标签 javascript html

所以这就是发生的事情,每当您在第一个 div 中键入并按 Enter 时,我都会创建一个待办事项列表应用程序,第二个 div 中会生成一个任务一个复选框,因此当您单击复选框时,任务会通过文本修饰获得删除线。
为此,我添加了一个onclick() 函数到 checkbox 但每次我点击 checkbox 时都会抛出一个错误:

"Cannot read property 'setAttribute' of undefined"

这是我的 JavaScript 代码。

function add_task() {
  var i = Math.floor(Math.random() * Math.floor(500));

  var work = document.getElementById('task').value; //Save input from user
  var text_node = document.createTextNode(work);

  if (!work.trim()) //Check if user entered value is empty or not
  {
    alert("A task requires something to do ;)\ntry adding some text...");
    return;
  }

  var task_list = document.createElement("ul"); //Create an unordered list
  task_list.setAttribute("type", "none");

  var create_task = document.createElement("INPUT"); //Create A CHECKBOX
  create_task.setAttribute("type", "checkbox");
  create_task.setAttribute("id", i);
  create_task.setAttribute("onclick", "task_done(this)");

  var checkbox_name = document.createElement("label"); //Create a label(user entered task) for checkbox 
  checkbox_name.setAttribute("for", i);
  checkbox_name.appendChild(text_node);

  task_list.appendChild(create_task); //Append CHECKBOX to unordered list
  task_list.appendChild(checkbox_name); //Append label to unordered list
  document.getElementById("div1").appendChild(task_list); //Append all elements to div

}

function task_done(t) {
  document.t.setAttribute("class", "strike"); //getting error 
  here
}

function clear_field() {
  document.getElementById('task').value = null;
}

function detect(e) {
  if (e.keyCode == 13) {
    add_task();
    clear_field();
  }
}

这是 HTML 代码,以防您需要

<html>
<head>
  <script type = "text/javascript" src = "action.js" ></script>
  <link rel="stylesheet" href='to-do_style.css'>
  <link href="https://fonts.googleapis.com/css?family=Raleway" 
  rel="stylesheet">
</head>
<body>
  <div id="div1" class="left">
    <h1>Tasks</h1>
    Add tasks by typing into right panel and <br>press enter.
  </div>
  <div id="div2" class="right">
    I need to...<br>
    <textarea id='task' rows="15" cols="76"onkeypress="detect(event)">    
    </textarea>
  </div>
</body>
</html>

最佳答案

实际上,您可以将 id 传递给 onclick 处理程序

function add_task() {
  var i = Math.floor(Math.random() * Math.floor(500));

  var work = document.getElementById('task').value; //Save input from user
  var text_node = document.createTextNode(work);

  if (!work.trim()) //Check if user entered value is empty or not
  {
    alert("A task requires something to do ;)\ntry adding some text...");
    return;
  }

  var task_list = document.createElement("ul"); //Create an unordered list
  task_list.setAttribute("type", "none");

  var create_task = document.createElement("INPUT"); //Create A CHECKBOX
  create_task.setAttribute("type", "checkbox");
  create_task.setAttribute("id", i);
  // changed here
  create_task.setAttribute("onclick", "task_done('" + i + "')");

  var checkbox_name = document.createElement("label"); //Create a label(user entered task) for checkbox 
  checkbox_name.setAttribute("for", i);
  checkbox_name.appendChild(text_node);

  task_list.appendChild(create_task); //Append CHECKBOX to unordered list
  task_list.appendChild(checkbox_name); //Append label to unordered list
  document.getElementById("div1").appendChild(task_list); //Append all elements to div

}

function task_done(t) {
  console.log(t)
  document.getElementById(t).setAttribute("class", "strike");
}

function clear_field() {
  document.getElementById('task').value = null;
}

function detect(e) {
  if (e.keyCode == 13) {
    add_task();
    clear_field();
  }
}
.strike {
  outline: 2px solid green;
}
<div id="div1" class="left">
  <h1>Tasks</h1>
  Add tasks by typing into right panel and <br>press enter.
</div>
<div id="div2" class="right">
  I need to...<br>
  <textarea id='task' rows="15" cols="76" onkeypress="detect(event)">    
</textarea>

关于javascript - 将 onclick() 函数添加到使用 DOM 操作创建的复选框并将其作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55343545/

相关文章:

javascript - 基本 2D 人形火柴人的逆向运动学原理

html - 歌曲结束后,如何使用音频标签播放下一个 “player”

html - PHP/JQuery/AJAX,一些初期问题

javascript - 具有特殊样式的背景 url

javascript - 计算旋转线段的 x、y 坐标以在 Canvas 上绘制

Javascript:如何访问动态命名的嵌套对象中的键?

javascript - 在简单的 Accordion 小部件中切换向上和向下箭头

javascript - react native : Change style prop of 3rd party component

php - 输入字段占位符不起作用。?

c# - 从母版页的下拉菜单中获取值(value)