JavaScript事件侦听器与隐藏的DOM元素进行交互

Cstansell2199

我正在创建工作报销表格。我们有4种不同的旅行类型,所以我的计划是为每种类型都有一个按钮,当您单击该按钮时,正确的表单将显示在它自己的<section>元素中。我正在使用Bootstrap 4,并且index.html文件中的每个表单都带有“ d-none”类,因此在加载时都不会显示。

在表单的里程部分,我有一个Font-Awesome的加号和减号来添加另一行或删除一行。我遇到的问题是我的事件侦听器可以与index.html中列出的第一种形式一起正常工作。但是在第二种形式上根本不起作用。

每个表格都有一个“ .mileage-form”类。我知道您不能使用具有相同ID的单独HTML元素,但是我认为类还可以。我知道可以通过单击正确的表单按钮时用JavaScript渲染HTML来解决此问题,而不仅仅是取消隐藏html,但是我试图理解为什么我的尝试行不通。

index.html如下所示:

<!----------------------------- ITINERANT TRAVEL ----------------------------->
    <section id="itinerant" class="d-none">
      <form class="mileage-form">
        <div class="form-group form-row justify-content-center" id="row-1">
             <div class="col-sm-2 col-md-1">
               <label for="date-1">Date</label>
               <input type="date" id="date-1" class="form-control">
             </div>
             <div class="col-sm-3 col-md-3">
               <label for="origin-1">Origin Address</label>
               <input type="text" class="form-control" id="origin-1" placeholder="Street Address, City, State, Zip">
             </div>
             <div class="col-sm-3 col-md-3">
               <label for="destination-1">Destination Address</label>
               <input type="text" class="form-control" id="destination-1" placeholder="Street Address, City, State, Zip">
             </div>
             <div class="col-sm-2 col-md-1">
               <label for="personal-1">Personal Miles</label>
               <input type="text" class="form-control" id="personal-1" placeholder="0">
             </div>
             <div class="col-sm-2 col-md-1">
               <label for="calculated-1">Calculated Miles</label>
               <input type="text" class="form-control" id="calculated-1" placeholder="0" value="" disabled>
             </div>
          </div>
      </form>
      <div class="form-group form-row justify-content-center">
        <a href='#'><i class="fa fa-plus add-row" style="color: blue;"></i></a>
        <a href='#'><i class="fa fa-minus delete-row" style="color: red;"></i></a>
      </div>
      <div class="form-group form-row justify-content-center">
        <button type="button" class="btn btn-outline-success" id="calculate-mileage">Calculate Mileage</button>
        <button type="button" class="btn btn-outline-danger" id="clear-all">Clear All</button>
      </div>
    </section>

<!-------------------- Single Day Travel ----------------------->
    <section id="single-day" class="d-none">
      <form class="mileage-form">
        <div class="form-group form-row justify-content-center" id="row-101">
          <div class="col-sm-2 col-md-1">
            <label for="date-101">Date</label>
            <input type="date" id="date-101" class="form-control">
          </div>
          <div class="col-sm-3 col-md-3">
            <label for="origin-101">Origin Address</label>
            <input type="text" class="form-control" id="origin-101" placeholder="Street Address, City, State, Zip">
          </div>
          <div class="col-sm-3 col-md-3">
            <label for="destination-101">Destination Address</label>
            <input type="text" class="form-control" id="destination-101" placeholder="Street Address, City, State, Zip">
          </div>
          <div class="col-sm-2 col-md-1">
            <label for="personal-101">Personal Miles</label>
            <input type="text" class="form-control" id="personal-101" placeholder="0">
          </div>
          <div class="col-sm-2 col-md-1">
            <label for="calculated-101">Calculated Miles</label>
            <input type="text" class="form-control" id="calculated-101" placeholder="0" value="" disabled>
          </div>
        </div>
    </form>
      <div class="form-group form-row justify-content-center">
        <a href='#'><i class="fa fa-plus add-row" style="color: blue;"></i></a>
        <a href='#'><i class="fa fa-minus delete-row" style="color: red;"></i></a>
      </div>
</section>

我的事件侦听器如下所示:

document.querySelector('.add-row').addEventListener('click', mileage.addRow);
document.querySelector('.delete-row').addEventListener('click', mileage.deleteRow);

用于添加和删除行的函数在Mileage类中,但是我认为那里没有问题,因为它们在“巡回”部分中可以正常运行。如果我将“巡回”部分注释掉,则它们与“单日”部分可以正常工作。但是就像我说的那样,如果两个部分都未注释且只是隐藏,则它们仅与巡回部分一起使用。如果您想查看该代码,则将它们全部保存在github上,它们将位于Mileage.js文件中。

对于我做错了任何解释,我将不胜感激!

迈克510a

采用

   querySelectorAll(".add-row").forEach(function(item){ item.addEventListener .. etc }):

以所有元素为目标

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JS:隐藏元素上的事件侦听器

向推入数组的 DOM 元素添加事件侦听器

使用“ this”的javascript函数DOM事件侦听器

意外的Javascript DOM事件侦听器问题

Javascript事件侦听器

访问事件侦听器的 javaScript 中的数组元素

(ReactJS)不应为非交互元素分配鼠标或键盘事件侦听器

新元素的事件侦听器(单击)。

Shadow DOM外部的事件侦听器将不会绑定到Shadow DOM内部的元素

Javascript删除“焦点”事件侦听器

Javascript - classList 事件侦听器的问题

JavaScript事件侦听器内存泄漏

类中的 Javascript 事件侦听器

javascript DOMContentLoaded事件侦听器

Javascript事件侦听器和数组

如何简化 javascript 事件侦听器?

Javascript 事件侦听器未触发

事件侦听器 onkeydown 问题 Javascript

Javascript 事件侦听器单击多个

如何添加触发将某种类型的元素添加到DOM的事件侦听器?

将事件侦听器添加到Angular 4中的DOM元素

通过添加大小调整事件侦听器来更新DOM元素的高度

当元素从 DOM 中删除时,Angularjs 会删除事件侦听器

如何在DOM元素上查找事件侦听器列表?

如何在尚未在 DOM [no-jQuery] 中的元素上添加事件侦听器?

为什么DOM元素仅在事件侦听器完成后才更新?(纯js)

jQuery面向对象的创建dom元素并添加事件侦听器

如何使用 redux-observable 在 dom 元素上添加事件侦听器

在 dom 中呈现元素后,事件侦听器不起作用