禁用对话框右上angular的“X”button

可能重复:
删除jQueryUI对话框上的closuresbutton?

我正在尝试做一个对话框,要求用户在继续之前同意条款,并且不想让用户只需单击对话框右上angular的“X”即可closures。 我想要求用户点击“我同意”。

有什么办法可以禁用对话框中的“X”?

澄清:我只是使用标准的jQuery UI对话框:$ .dialog()。

我假设你正在使用jQuery UI。

如果是这样,请附上一个beforeClose事件处理程序,如果同意button没有被点击,则返回false。 您也可以使用CSS将Xbutton设置为{display: none}

 var agreed = false; //has to be global $("something").dialog({ buttons: { 'Apply': function () { agreed = true; $(this).dialog("close"); } }, beforeClose: function () { return agreed; } }); 

我发现在另一个post上,希望它可以帮助,它为我工作:

 $("#div2").dialog({ closeOnEscape: false, open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } }); 

这是链接:

如何删除jQuery UI对话框上的closuresbutton?

如果您的对话框是常规的popup窗口,则不可能阻止用户closures窗口。

您可以使用jQuery模式对话框插件,如jqModal 。

但请注意,您无法阻止用户closures主窗口。


编辑 :如果您使用jQuery UI对话框,您可以添加以下CSS规则:

 #someId .ui-dialog-titlebar-close { display: none; } 

你也应该把closeOnEscape设置为false


另外,为什么你强迫用户点击I Agree
为什么你不能像closures你的意见一样closures窗口呢?

至于你禁止用户点击X的任务,我会推荐几种方法之一:

  1. 使用CSS规则将该button的显示设置为“无”。 使用Firebug的Inspect模式,你应该能够看到jQuery UI对话框放在那里的标签,并为它添加一个CSS规则。 如果显示为无,用户就不能点击它。
  2. 同样,附加一个jQuery .click()事件什么都不做,并返回false来停止事件传播(我从来没有真正做过这个,但它应该工作)。
  3. 您可以将一个函数附加到对话框的beforeClose()事件上,如果用户没有点击“我同意”,就可以阻止对话框closures。
  4. 最复杂的,但如果你想要类似的对话框或做出其他function的变化很有用,你可以通过创build一个jQuery用户界面插件,在内部实例化对话框,然后通过应用CSS规则或附加事件修改默认行为如上所述。

希望其中一个让你朝着正确的方向前进…

注意到为对话框标题栏创build的div具有引用对话框(ui-dialog-title- {yourDialogName})的aria-labelledby属性,所以我只用以下CSS隐藏了“x”:

 div.ui-dialog[aria-labelledby="ui-dialog-title-myDialog"] a.ui-dialog-titlebar-close { display: none; } 

为了防止这种情况,我也设置了closeEnEscape。

我添加了一个相关的问题:在用户单击Xclosures特定的对话框窗口后重新加载,不在其他窗口中重新加载。 我在.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文本中查找标题,并在closures时重新加载,否则closures而不重新加载。

只是对迈克尔·梅多斯的答案的补充。 如果您有多个表单,并且不想拥有全局variables,那么您可以将一个属性添加到表单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是作为string存储的。 但我不确定….

如果你使用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这样的插件