【问题标题】:Getting a callback function to trigger after clicking on an alert with JQuery使用 JQuery 单击警报后触发回调函数
【发布时间】:2016-10-15 08:41:43
【问题描述】:

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

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

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

问题在于,一旦弹出警报而不是单击警报时,就会调用警报中的回调。无论如何我可以让警报窗口保持在页面之间或在警报消失后执行回调吗?

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

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()初始化,所以表单仍然会提交。这是我的疏忽,感谢所有试图提供帮助的人。

【问题讨论】:

  • 您原来的successalert("xx", callback()),而不是alert("xx"); callback() - 如果callback()alert() 括号内,它将在显示警报之前调用 - 试试@jszobody 的给出的答案(只有一个回调()调用)
  • callback 中添加重定向以外的内容 - 例如,只是另一个alert(使用不同的文本)。然后你会看到它是否被调用以及何时调用。
  • @freedomn-m 好的,我尝试将 alert("from callback") 放入顶部的回调函数中。发生的事情是,另一个(“您正在被重定向”)警报功能没有出现,然后重定向仍然发生,而新警报却出现了。看起来无论出于何种原因,回调在警报之前执行?

标签: jquery callback


【解决方案1】:

无论如何...让回调在警报消失后执行?

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

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

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

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


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

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

callback();

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

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

【讨论】:

  • 我试过这个方法,在点击警报之前重定向仍然发生。知道可能出了什么问题吗?
  • 那么您在其他地方遇到了问题。发布对您的问题的更新并显示您的确切代码。
  • 见这里:jsbin.com/sejosexuze/edit?js,console。这是一个简单的示例,非常清楚地表明回调将在 警报被解除之前运行。
  • 我相信你,只是不知道为什么它不适合我。
  • @vgbm 嘿,我明白了。这根本不是 javascript 问题。您的按钮正在提交表单!
【解决方案2】:

如果你只是将回调函数的调用放在警报之后的下一行,那么 Javascript 的执行将暂停,直到用户点击 OK:

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

【讨论】:

    【解决方案3】:

    这样不行吗?

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

    【讨论】:

    • 否;我最初将成功函数设置为成功: function (data) { if (data.fieldIsTrue) { alert("You are being redirected"); } 打回来(); }
    • 这是答案还是问题(评论)?
    • @freedomn-m 我应该澄清一下:我已经像 alert("test");然后回调();然后改成alert("test", callback());
    【解决方案4】:

    我想你需要的是这个:

    if (window.confirm('You are being redirected ?'))
    {
        callback()
    }
    else
    {
        // They clicked no do something else.
    }
    

    但如果你想使用警报,请使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多