我有一个重定向用户的回调函数,我希望在警报窗口上单击“确定”后触发它。现在,代码如下所示:
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() ,因此表单仍然会提交。这是我的疏忽,感谢所有试图提供帮助的人。
无论如何......一旦警报消失就执行回调?
是的。只需在警报后执行回调。
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 警报保持可见。
| 归档时间: |
|
| 查看次数: |
14819 次 |
| 最近记录: |