我正在为工作创建旅行报销表。我们有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文件中。
对于我做错了什么的解释,我将不胜感激!
答案 0 :(得分:1)
使用
querySelectorAll(".add-row").forEach(function(item){ item.addEventListener .. etc }):
定位所有元素