可能重复:
删除 jQueryUI 对话框上的关闭按钮?
我正在尝试制作一个对话框,要求用户在继续之前同意条款,并且不想让用户只需单击对话框右上角的“X”即可关闭。我想要求用户点击“我同意”。
有什么办法可以禁用对话框中的“X”?
澄清:我只是使用标准的 jQuery UI 对话框:$.dialog()。
可能重复:
删除 jQueryUI 对话框上的关闭按钮?
我正在尝试制作一个对话框,要求用户在继续之前同意条款,并且不想让用户只需单击对话框右上角的“X”即可关闭。我想要求用户点击“我同意”。
有什么办法可以禁用对话框中的“X”?
澄清:我只是使用标准的 jQuery UI 对话框:$.dialog()。
我在另一篇文章中找到了这个,希望它有帮助,它对我有用:
$("#div2").dialog({
closeOnEscape: false,
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});
这是链接:
我假设您正在使用 jQuery UI。
如果是这样,请附加一个 beforeClose 事件处理程序,如果尚未单击“同意”按钮,则从它返回 false。您还可以使用 CSS 将 X 按钮设置为{display: none}
var agreed = false; //has to be global
$("something").dialog({
buttons: {
'Apply': function () {
agreed = true;
$(this).dialog("close");
}
},
beforeClose: function () {
return agreed;
}
});
如果您的对话框是常规弹出窗口,则无法阻止用户关闭窗口。
您可以使用 jQuery 模态对话框插件,例如jqModal。
但是请注意,您也不能阻止用户关闭主窗口。
编辑:如果您使用 jQuery UI 对话框,您可以添加以下 CSS 规则:
#someId .ui-dialog-titlebar-close {
display: none;
}
您还应该将 设置closeOnEscape
为false
。
另外,你为什么要强迫用户点击I Agree
?
为什么您不能将关闭的窗口视为您不同意?
至于您不允许用户单击 X 的任务,我会推荐以下几种方法之一:
希望其中一个能让你朝着正确的方向前进......
注意到为对话框的标题栏创建的 div 有一个引用您的对话框的 aria-labelledby 属性(ui-dialog-title-{yourDialogName}),所以我只是用以下 CSS 隐藏了“x”:
div.ui-dialog[aria-labelledby="ui-dialog-title-myDialog"] a.ui-dialog-titlebar-close {
display: none;
}
我还将 closeOnEscape 设置为 false 以防止这种情况。
我添加了一个相关问题:在用户单击 X 以在特定对话框窗口中关闭后重新加载,在其他窗口中不重新加载。我在 .js 中添加了 jQuery 对话框功能:
.click(function(i){ jQuery('span.ui-dialog-title').each(function(index) {
if (jQuery(this).text() == '/**Title String Here**/') {
a.close(i); location.reload(true);
} else {
a.close(i);
}
});
return false})
这会在 span 文本中查找标题,并在关闭时重新加载,否则在不重新加载的情况下关闭。
只是对迈克尔梅多斯答案的补充。如果您有多个表单并且不想使用全局变量,您可以向表单 DOM 元素添加一个属性。就像是 :
$('#yourForm').dialog(
open : function(){
$('#yourForm').attr('agreed', false);
},
beforeClose : function(){
return $('#yourForm').attr('agreed') == 'true';
},
buttons:{'OK':function(){
$('#yourForm').attr('agreed', true);
$(this).dialog('close');
},
'Cancel' : function(){
$('#yourForm').attr('agreed', false);
$(this).dialog('close');
}
}
);
我认为您必须与“真”进行比较,而不仅仅是真的,因为我认为 attr 存储为字符串。但我不确定....
如果您正在使用alert
,也许您应该考虑confirm
:
if (!confirm("Click OK to confirm that you agree to the terms and conditions.")) {
// they didn't click OK
} else {
// they did.
}
或者,使用提到的 SLaks 之类的插件