我在JavaScript中遇到一些有关preventdefault的问题,特别是jQuery。我试图得到一个模态框来显示带有“.confirm”类的元素,如果他们确定他们想要在继续执行它所设置的内容之前确定他们想要执行该操作,则会有效地覆盖默认操作。做。
$('.confirm').on('click', function(event, options)
{
options = options || {};
if (!options.confirmed)
{
vex.dialog.confirm({
message: 'Are you sure that you want to perform this action?',
callback: function(response) {
if (response === true) {
$(event.target).trigger('click', {confirmed: response});
}
}
});
event.preventDefault();
}
});
但事实并非如此,因为无论如何,默认操作似乎都会覆盖未来的任何调用。
任何帮助都会很棒,因为它暂时让我感到难过
答案 0 :(得分:0)
在API调用之前放置event.preventDefault,我认为这应该可行。
$('.confirm').on('click', function(event, options)
{
options = options || {};
if (!options.confirmed)
{
event.preventDefault();
vex.dialog.confirm({
message: 'Are you sure that you want to perform this action?',
callback: function(response) {
if (response === true) {
$(event.target).trigger('click', {confirmed: response});
}
}
});
}
});
编辑:
我认为这是没有解开/重新绑定的唯一方法,如你所说。
$('.confirm').on('click', function(event, options)
{
options = options || {};
if (!options.confirmed)
{
event.preventDefault();
vex.dialog.confirm({
message: 'Are you sure that you want to perform this action?',
callback: function(response) {
if (response === true) {
$(event.target).trigger('click', {confirmed: response});
}
}
});
}
else {
window.location = $(this).attr("href");
}
});
答案 1 :(得分:0)
尝试在回调中删除带有$('.confirm').off()
的点击处理程序。这样,当您以编程方式触发单击时,将调用您的单击处理程序。