每当关闭引导程序模式窗口时,我都需要清除输入。为此,我添加了一个hidden.bs.model处理程序。
为什么事件处理程序hidden.bs.modal会触发在与同一模式中与“运行”按钮关联的on单击事件之前清除输入?它使我无法使用输入中的值,因为它们已由hidden.bs.modal
清除。uniqueEdges: "path"
// BUTTON LOOKUP
$( '.container').on("click", ".btnGetPerson", function() {
var dlic = queryPersonInputValue.match(/^[a-zA-Z]{2}\d{6}$/);
console.log('the value of variable dlic is :' +dlic);
// other REST stuff
});
// RESET LOOKUP MODAL ON CLOSE
$('#queryPersonModal').on('hidden.bs.modal', function() {
console.log('modal closed');
$(this)
.find("input,textarea,select")
.val('')
.end()
.find("input[type=checkbox], input[type=radio]")
.prop("checked", "")
.end();
});
自添加console.log('the value of dlic is :' +dlic);
以来始终打印null
。
我已将HTML添加到小提琴中:
答案 0 :(得分:2)
这与事件冒泡和事件传播有关:
事件发生在元素上时,它首先在该元素上运行处理程序,然后在其父元素上运行,然后一直在其他祖先上运行,终止于# checking for positive case
check_condition(n, c_arr) # returns `True`
# checking for negative case
check_condition(n, d_arr) # returns `False`
对象。
使用window
元素编写.btnGetPerson
按钮的点击处理程序时,您已经使用了这一原理。
Bootstrap Modal Js通过以下方式为具有.container
属性的元素实现了点击处理程序:
data-dismiss
其中this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
是模态元素,而this.$element
是隐藏模态并触发this.hide
事件的方法。
因此,当单击hidden.bs.modal
时,我们具有以下事件序列:
[data-dismiss="modal"]
因此,0: button.btn.btn-primary.btnGetPerson
1: div.modal-footer
2: div.modal-content
3: div.modal-dialog
4: div#queryPersonModal.modal (*)
5: div.container
6: body
7: html
8: document
9: Window
仅在click.dismiss.modal
,.btnGetPerson
,.modal-footer
,.modal-content
的所有单击处理程序运行之后才运行。
因此,附加到.modal-dialog
元素的所有事件处理程序将在.container
事件之后运行。
因此,我的解决方案是将点击处理程序直接附加到#queryPersonModal.modal
元素上:
'.btnGetPerson'
提琴:https://jsfiddle.net/z6ntys7f/23/
或者,如果将模式html异步插入到页面中,则可以采用以下方法:
-从按钮中删除$(".btnGetPerson").on("click", function() {
// ...
});
属性
-在点击处理程序中添加data-dismiss
:
$('#queryPersonModal').modal('hide');