RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1593440
Accepted
Максим
Максим
Asked:2024-09-10 19:24:41 +0000 UTC2024-09-10 19:24:41 +0000 UTC 2024-09-10 19:24:41 +0000 UTC

如何访问原本不在页面上的按钮?

  • 772

我正在创建一个带有状态按钮的待办事项列表。单击此按钮时,会显示一个弹出窗口,该按钮最初不在页面上,而是随输入的任务一起出现。问题是,对于第一个任务,按钮起作用并显示弹出窗口,但是如果您输入后续任务,按钮不起作用,请帮我找出错误是什么

    //создание задачи 
const inputField = document.querySelector('#inputField');
const clearButton = document.getElementById('clearButton');
const form = document.querySelector('#form');
const taskList = document.querySelector('#taskList');


inputField.addEventListener('input', function() {
  clearButton.style.display = this.value ? 'block' : 'none';
});

clearButton.addEventListener('click', function() {
  inputField.value = '';
  clearButton.style.display = 'none';
});


form.addEventListener('submit' ,(event) => {
event.preventDefault();

const taskText = inputField.value

const taskHTML = `<li class="TS">
                    <span>${taskText}</span>
                    <button data-action="start" id="btn-status">Открыто</button>
                </li>`

taskList.insertAdjacentHTML('beforeend',taskHTML);

inputField.value = "";
inputField.focus();

    //пробовал создать функцию,которая обращается к родителю 
taskList.addEventListener('click',popupTask)

function popupTask(event){
    if(event.target.dataset.action === "start"){
    const parentNode =  event.target.closest('.TS');
    parentNode.add()

    }
}
//popup
document.getElementById("btn-status").addEventListener("click",function(){
    document.getElementById("myModal").classList.add("open")
})

document.getElementById("close-myModal-btn").addEventListener("click",function(){
    document.getElementById("myModal").classList.remove("open")
})

这是添加任务的块

  <div class="block-two">
                <div class="list-block">
                    <p id="p1"><b>Задачи</b></p>
                    <p id="p2"><b>Статус</b></p>
                </div>
                <div class="task-status">
                    <ul class="ts-list" id="taskList">
                            <!-- <li class="TS">
                                <span>Полить цветы</span>
                                <button data-action="start" id="btn-status">Открыто</button>
                            </li> -->
                    </ul>
                </div>
            </div>

这是如果我单击后续任务的按钮时弹出的错误(第一个任务除外,弹出窗口显示在第一个任务上): TypeError:parentNode.add is not a function at HTMLUListElement.popupTask

javascript
  • 2 2 个回答
  • 31 Views

2 个回答

  • Voted
  1. ksa
    2024-09-10T20:01:01Z2024-09-10T20:01:01Z

    如何访问原本不在页面上的按钮?

    一种解决方案是使用事件委托...作为这种方法的一种布局。

    const ou = document.querySelector('ul')
    document.querySelector('.add').addEventListener('click', _ => {
      const oi = document.querySelector('input')
      const o = temp.content.cloneNode(true)
      o.querySelector('span').textContent = oi.value
      oi.value = ''
      ou.append(o)
    })
    ou.addEventListener('click', e => {
      const o = e.target.closest('li')
      if (!o) return
      o.querySelector('button').classList.add('off')
    })
    .off {
      display: none;
    }
    li + li {
      margin-top: 5px;
    }
    <input />
    <button class='add'>+</button>
    <ul></ul>
    <template id='temp'>
      <li>
        <span></span>
        <button>Открыто</button>
      </li>
    </template>

    • 0
  2. Best Answer
    Owlly
    2024-09-10T20:15:34Z2024-09-10T20:15:34Z

    问题是,对于每个新任务,您都向 DOM 添加一个按钮,但该按钮的单击事件处理程序仅针对第一个按钮安装,因为该处理程序是id btn-status在添加任务之前安装在元素 c 上的。

    form.addEventListener('submit', (event) => {
      event.preventDefault();
    
      const taskText = inputField.value;
    
      const taskHTML = `<li class="TS">
                          <span>${taskText}</span>
                          <button data-action="start" class="btn-status">Открыто</button>
                        </li>`;
    
      taskList.insertAdjacentHTML('beforeend', taskHTML);
    
      inputField.value = "";
      inputField.focus();
    });
    
    // Делегирование событий на родителя taskList
    taskList.addEventListener('click', (event) => {
      if (event.target.classList.contains('btn-status')) {
        document.getElementById("myModal").classList.add("open");
      }
    });
    
    document.getElementById("close-myModal-btn").addEventListener("click", function(){
      document.getElementById("myModal").classList.remove("open");
    });
    

    btn-status 按钮单击处理程序现在通过事件委托安装。现在,处理程序不再将处理程序附加到特定按钮,而是附加到父级 (taskList),该父级始终存在于 DOM 中。

    • 0

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5