jquery - 使用 JQuery 单击警报后获取回调函数以触发

标签 jquery callback

我有一个重定向用户的回调函数,我希望在单击警报窗口上的“确定”后触发它。现在,代码如下所示:

function myFunction(callback) {
    var ajaxUrl = "url_path";
    $.ajax({
        url: ajaxUrl,
        success: function (data) {
            if (data.fieldIsTrue) {
                alert("You are being redirected", callback());
            } else {
                callback();
            }
        }
    });
}

回调包含重定向和表单提交。回调根据 View 模型字段转到不同的位置,因此回调不应该不同。

问题是警报中的回调是在弹出警报时调用,而不是在单击警报时调用。无论如何我可以让警报窗口在页面之间保持打开状态,或者在警报消失后执行回调?

编辑:最初,我曾尝试使用如下所示的成功函数:

success: function (data) {
            if (data.fieldIsTrue) {
                alert("You are being redirected", callback());
            }
                callback(); 
        }

所以我不认为解决方案是

alert();
callback();

Edit2:刚刚尝试做

alert();
callback();

并确认在点击弹窗之前重定向仍然发生

这里有更多信息,因为问题出在其他地方:

带回调的函数调用:

        $(".button").click(function (e) {
        //e.preventDefault(); doesn't seem to help
        myFunction(function () {
            if ($("#myForm").validate().form()) {
                $("button").disable();
                document.forms['myForm'].submit();
            } else {
                ValidateFields();
            }
        });  

一些cshtml:

@{Html.BeginForm<MyController>(x => x.FunctionWithRedirects(null), FormMethod.Post, new { id = "myForm" });}  
//some hidden fields
<button class="button myButton">Button I want to alert from</button>
@{Html.EndForm();}  

解决方案: 所以我最终的工作解决方案实际上具有原始功能,但是看来我在原始按钮单击中没有 e.preventDefault()初始化,因此表单仍会提交。这是我的疏忽,感谢所有试图提供帮助的人。

最佳答案

Is there anyway... make the callback execute once the alert disappears?

是的。只需在警报之后执行回调。

alert("You are being redirected");
callback();

简单!在用户单击“确定”之前,警报会阻止执行。

这是一个简单的示例,显示回调在警报解除后才会运行:http://jsbin.com/sejosexuze/edit?js,console


如果您只希望在 data.fieldIsTrue 时出现警报,但您希望无论如何执行回调,这应该适合您:

if (data.fieldIsTrue) {
    alert("You are being redirected");
}

callback();

Is there anyway I can get the alert window to stay up... between pages

不,您不能让 javascript 警报在位置更改期间/之后保持可见。

关于jquery - 使用 JQuery 单击警报后获取回调函数以触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814999/

相关文章:

jquery - TinyMCE 和 JQuery 对话框 : TinyMCE read only when modal:true in the Dialog

javascript - 如何使事件目标在另一个函数中可访问?

c - 将代码作为函数参数传递,而不是声明回调

javascript - 在 MONGODB 上使用 $in 和 $and 在我的情况下不起作用

jquery - 让按钮引发点击事件,即使它在 jquery 中被禁用

JavaScript Str.Replace 为 Promise

javascript - async.js waterfall 中未处理的 promise 拒绝警告

java - Spring异步RMI调用

javascript - 如何使用 find() 函数通过数据属性查找元素?

javascript - 我如何使用 $.post() 发送表单数据?