单击按钮之前重置引导程序模态触发

时间:2019-04-13 08:13:13

标签: javascript jquery html twitter-bootstrap

每当关闭引导程序模式窗口时,我都需要清除输入。为此,我添加了一个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添加到小提琴中:

https://jsfiddle.net/bigalnz/gLw8pnx3/1/

1 个答案:

答案 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');

提琴:https://jsfiddle.net/z6ntys7f/25/