我想用jQuery对话框覆盖javascript confirm。这是我的覆盖码:
window.confirm = function(message, caption = 'Confirmation'){
$(document.createElement('div')).attr({title: caption, 'class': 'dialog'}).html(message).dialog({
position:['center',100],
dialogClass: 'fixed',
buttons: {
"OK": function(){
$(this).dialog('close');
return true;
},
"Cancel": function(){
$(this).dialog('close');
return false;
}
},
close: function(){
$(this).remove();
},
draggable: false,
modal: true,
resizable: false,
width: 'auto'
});
};
这是我的行动代码:
if(confirm('Are you sure?') == false) { return false; }
此代码不起作用。我怎么能这样做?
答案 0 :(得分:6)
这是因为确认方法显示并显示对话框,并在按下按钮之前返回。
您可以使用回调方法来解决它
window.confirm = function (message, callback, caption) {
caption = caption || 'Confirmation'
$(document.createElement('div')).attr({
title: caption,
'class': 'dialog'
}).html(message).dialog({
position: ['center', 100],
dialogClass: 'fixed',
buttons: {
"OK": function () {
$(this).dialog('close');
callback()
return true;
},
"Cancel": function () {
$(this).dialog('close');
return false;
}
},
close: function () {
$(this).remove();
},
draggable: false,
modal: true,
resizable: false,
width: 'auto'
});
};
confirm('dd', function () {
//what every needed to be done on confirmation has to be done here
console.log('confirmed')
})
演示:Fiddle
您不能将其与if..else
声明
答案 1 :(得分:0)
我知道这是一个老问题但是为了完整性我离开了我的解决方案,是jquery的插件你只需要复制/粘贴这个内容另存为.js文件并在你的html中包含(和jquery-ui一起)警报和确认对话框已被替换。
我必须指出上面的解决方案只调用用户成功的回调(按OK按钮),但我希望始终调用回调,这样你就可以实现更多的行为
jQuery.cambiarAlert = function (options)
{
var defaults = {
title: "Atención",
buttons: {
"Aceptar": function()
{
jQuery(this).dialog("close");
}
}
};
jQuery.extend(defaults, options);
delete defaults.autoOpen;
window.alert = function ()
{
var html;
try {
html = arguments[0].replace(/\n/, "<br />")
} catch (exception) {
html = arguments[0]
}
jQuery("<div />", {
html: "<div class='.navbar-inverse .navbar-inner'>" + html + "</div>"
}).dialog(defaults);
};
window.confirm = function (message, callback, caption) {
caption = caption || 'Confirmación'
$(document.createElement('div')).attr({
title: caption,
'class': 'dialog'
}).html(message).dialog({
buttons: {
"Aceptar": function () {
$(this).dialog('close');
if (callback && typeof(callback) == "function"){
callback(true);
}
return true;
},
"Cancelar": function () {
$(this).dialog('close');
if (callback && typeof(callback) == "function"){
callback(false);
}
return false;
}
},
close: function () {
$(this).remove();
},
draggable: false,
modal: true,
resizable: false,
width: 'auto'
}).position({
my: "center",
at: "center",
of: window
});
};
return this;
};
$(function ()
{
$.cambiarAlert();
});
这里的重点是我调用callback(true)或callback(false)这样我可以编写一个回调函数,将结果用作函数本身的参数
所以在我的代码中,我可以这样做:
confirm("Are you sure?", function(result){
if (result){
//Perform ajax call
}
})