由于 jquery UI 对话框不支持返回真/假,我需要一些其他方法来替换 javascript 确认。
它必须返回真/假,以便我在 javascript 中的验证过程将运行:
var where_to_coupon = confirm(pm_info_msg_013);
if (where_to_coupon== true) {
doSubmit=true;
return doSubmit;
由于 jquery UI 对话框不支持返回真/假,我需要一些其他方法来替换 javascript 确认。
它必须返回真/假,以便我在 javascript 中的验证过程将运行:
var where_to_coupon = confirm(pm_info_msg_013);
if (where_to_coupon== true) {
doSubmit=true;
return doSubmit;
我知道这样做的唯一方法是将回调传递给函数。
您面临的问题是 JQuery UI 不会像确认等待用户输入那样阻止执行,因此您需要打开对话框并在用户单击答案时采取相应的行动。
如果您使用 Jquery UI 对话框,您可以将回调函数绑定到按钮。
例如:
myConfirm("Are you sure?", function(){ [YES CODE] }, function(){ [NO CODE] });
您的自定义确认将如下所示:
var myConfirm = function(msg, yesAction, noAction){
$.dialog{
[CODE],
buttons: {
yes: yeasAction,
no: noAction
}
};
};
jQuery UI 可以做你想做的事,你只需要调整你的代码以异步方式工作。Ariel Popovosky 给出了一个答案,它试图将对话调用包装到一个简单的函数调用中,并且效果很好,但需要进行任何更改所需的相同基本同步/异步代码修改window.confirm
。
使用window.confirm
我们使用同步的做事方式——当用户做出决定时程序暂停。见例子:http: //jsfiddle.net/9jY7E/
使用 UI 的对话框,我们只需将应在确认时发生的行为移动到分配给 UI 按钮之一的行为中。对话框显示,程序继续运行。但是因为您将“ok”代码移动到绑定到按钮的功能中,所以该代码在用户单击它之前不会运行。以下链接与我展示的示例相同window.confirm
,但已修改为使用 UI 对话框:http: //jsfiddle.net/9jY7E/1/
我不知道有什么替代品可以window.confirm
像这样工作window.confirm
但允许您自己的样式。我所知道的所有对话系统的工作方式都与 UI 有点相似。
附加:在以下链接中,您将使用 Ariel 在他的回答中给出的方法找到相同外部链接确认的第三个示例:http: //jsfiddle.net/9jY7E/2/
这有点令人费解,但它对我有用。它设置一个“全局”变量并测试该值以查看是否应显示对话框。
我知道这可能不是最有效的方法。
confirmIt 函数返回真或假。
接近尾声的原因setTimeout("confirmItConfirmed=false;",500);
是重置变量,以便下次调用该函数时它不会只返回 true。
一些浏览器在处理自动高度和宽度方面比其他浏览器做得更好。
通知功能是alert的替代品,confirmIt替代confirm。
<html>
<head>
<title>jQuery Confirm & Alert Replacements</title>
<link type=text/css href=http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/redmond/jquery-ui.css rel=stylesheet />
<script type=text/javascript src=https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js></script>
<script type=text/javascript src=https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js></script>
<script type=text/javascript>
var confirmItConfirmed = false;
var jq = $.noConflict();
function notice(message,title,height,width) {
if (!title)
var title = document.title+' says...';
jq('body').append('<span id=noticeDialogSpan style=display:none></span>');
jq('#noticeDialogSpan').html('<div id=noticeDialog title="'+title+'">'+message+'</div>');
if (!width)
var width = jq('#noticeDialogSpan').width()+40;
if (!height)
if (jq('#noticeDialogSpan').height() > jq(window).height()-100)
var height = jq(window).height()-100;
else
var height = 'auto';
jq('#navMenu').hide();
jq('#noticeDialog').dialog ({
height: height,
width: width,
modal: true,
close: function(event,ui) {
jq(this).dialog('destroy');
jq('#noticeDialog').remove();
jq('#noticeDialogSpan').remove();
jq('#navMenu').show();
},
buttons: {
'Close': function() { jq(this).dialog('close'); }
}
});
}
function confirmIt(e,message,title,height,width) {
if (!confirmItConfirmed) {
if (!title)
var title = document.title+' says...';
jq('body').append('<span id=confirmationDialogSpan style=display:none></span>');
jq('#confirmationDialogSpan').html('<div id=confirmationDialog title="'+title+'">'+message+'</div>');
if (!width)
var width = jq('#confirmationDialogSpan').width()+40;
if (!height)
if (jq('#confirmationDialogSpan').height() > jq(window).height()-100)
var height = jq(window).height()-100;
else
var height = 'auto';
jq('#navMenu').hide();
jq('#confirmationDialog').dialog ({
height: height,
width: width,
modal: true,
close: function(event,ui) {
jq('#confirmationDialog').remove();
jq('#confirmationDialogSpan').remove();
jq(this).dialog('destroy');
jq('#navMenu').show();
},
buttons: {
'Confirm': function() {
jq(this).dialog('close');
confirmItConfirmed = true;
e.click();
},
'Cancel': function() { jq(this).dialog('close'); }
}
});
}
setTimeout("confirmItConfirmed=false;",500);
return confirmItConfirmed;
}
function testIt(e) {
if (confirmIt(e,'Are you sure you want to continue?','My Title'))
notice('You clicked Confirm','My Title');
}
</script>
</head>
<body>
<br />
<br />
Click <a href=javascript:void(0) onclick="testIt(this)">HERE</a> to test a link.
<br />
<br />
Click this button to test it too <input value='Click Me' type=button onclick="testIt(this)" />
</body>
</html>
这也可以使用 boopup + 回调来完成:
Boopup.confirm("This is a boopup confirm!", function(agree) {
console.log(agree);
})