【发布时间】:2019-06-07 19:49:11
【问题描述】:
我有一个按钮可以打开一个模式,该模式有一个带有一些选择器的表单,然后是一个触发确认框的提交按钮。 (注意:仅当通过复选框在表格中选择了行时,模式才会打开)。该功能在大多数情况下都按预期工作。我注意到,如果我退出模态,更改表格中的选择,重新单击打开模态的按钮并单击提交,确认框会弹出两次。如果我关闭 modal 再打开,确认框会弹出 3 次,以此类推。我不确定它为什么这样做。 (表和选择器是动态创建的)
HTML:
<!-- Reassign Unit Button -->
<button id='reassign_unit_button'>Reassign Unit</button>
<!-- Reassign Unit Modal -->
<div id="reassignModal" class="modal">
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<h2>Reassign Unit</h2>
</div>
<div class="modal-body">
<form id="reassign_unit_form">
<label><strong>Office: </strong></label>
<select id="reassign_unit_geo">
</select>
<label><strong>Customer: </strong></label>
<select id="reassign_unit_customer">
</select>
<label><strong>Frimware: </strong></label>
<select disabled='disabled' id="reassign_unit_fw">
<option selected="selected" value="0">Select firmware version...</option>
</select>
<button id="submit_reassign" type="submit">Submit</button>
</form>
</div>
</div>
</div>
JavaScript:
$(document.ready(function() {
var modal = document.getElementById('reassignModal');
$('#reassign_unit_button').on('click', function() {
if ($('.opt:checkbox:checked').length === 0) {
alert('No units selected for reassignment. Please check the checkbox of the unit(s) you would like to reassign from the [Units Table].');
} else {
// code for selector listeners
// When submit clicked
$('#submit_reassign').on('click', function(event) {
event.preventDefault();
var $units = $('.opt:checkbox:checked').length; //.opt class is on all checkboxes in table
if(confirm("Are you sure you want to reassign ["+$units+"] units?")) {
// Get all selected units
$('.opt:checkbox:checked').each(function() {
var $id = $(this).val();
var $mac = $('#customer_table_mac_'+$id).text();
$.ajax({
cache: false,
url:'reassign_unit.php',
method:'POST',
data:{
reassign_geo:$geo, //$geo, $cus, $fw, and $ver are set elsewhere
reassign_customer:$cus,
reassign_fw:$fw,
reassign_ver:$ver,
reassign_mac:$mac,
},
success: function(data) {
if (data !== '') { alert(data); }
},
});
});
}
});
}
});
});
【问题讨论】:
-
这个 JavaScript 的 sn-p 是否多次执行?听起来这里的上下文比这里显示的要多。
-
我根本看不到那个代码
-
@jrod091:那
if在哪里?你能提供一个更完整的例子吗?这种行为听起来像是点击处理程序被多次附加。 -
每次单击
#reassign_unit_button时,都会将另一个事件处理程序添加到#submit_reassign。有你的问题。 -
不要在可能再次发生的事件中绑定事件。
标签: javascript jquery html