使用 JQuery 单击警报后获取要触发的回调函数

vgb*_*gbm 2 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();
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

其中回调包含重定向和表单提交。回调根据视图模型字段转到不同的位置,因此回调不应有所不同。

问题是警报中的回调在警报弹出时被调用,而不是在警报被点击时被调用。无论如何我可以让警报窗口保持不变,无论是在页面之间还是在警报消失后执行回调?

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

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

所以我不认为解决方案是

alert();
callback();
Run Code Online (Sandbox Code Playgroud)

Edit2:只是尝试做

alert();
callback();
Run Code Online (Sandbox Code Playgroud)

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

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

带回调的函数调用:

        $(".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();
            }
        });  
Run Code Online (Sandbox Code Playgroud)

一些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();}  
Run Code Online (Sandbox Code Playgroud)

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

jsz*_*ody 8

无论如何......一旦警报消失就执行回调?

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

alert("You are being redirected");
callback();
Run Code Online (Sandbox Code Playgroud)

简单的!警报会阻止执行,直到用户单击“确定”。

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


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

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

callback();
Run Code Online (Sandbox Code Playgroud)

无论如何我可以让警报窗口保持不变......在页面之间

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