默认操作未在新呼叫时重置

时间:2014-11-20 23:39:44

标签: javascript jquery preventdefault

我在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();
    }

});

流量

  • 显示模态对话框。
  • 如果用户确认操作,则会再次触发click事件,只有确认此时间才会传回事件处理程序。
  • 然后跳过检查并继续默认操作。

问题

但事实并非如此,因为无论如何,默认操作似乎都会覆盖未来的任何调用。

尝试

  • 取消/重新绑定 - 要求用户再次单击它才能使其正常工作。
  • window.location(不理想,因为它假定该操作是链接但有效)
  • 确认(与美学并不完美,因此需要更好的解决方案)

备注

  • 需要异步。

任何帮助都会很棒,因为它暂时让我感到难过

2 个答案:

答案 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()的点击处理程序。这样,当您以编程方式触发单击时,将调用您的单击处理程序。