【发布时间】:2012-10-10 00:10:23
【问题描述】:
我正在开发一个使用 jQueryUI 并创建大量对话框的 Web 应用程序。对话框各不相同,关闭对话框的按钮最终会在对话框中嵌入多个 div。
我想要一个总是关闭包含对话框的函数。
以下面的html为例:
<div id="demoDialog">
<div>
<div id='demoDialogSubmit'>
<input type='submit' onClick='selfCloseDialog();' value='Ok' style='margin-top:10px' />
</div>
<div>
<div>
在我的 js 代码中,我将它初始化为一个对话框:
$( "#demoDialog" ).dialog( params );
现在对于点击我有一些不太好的选择。我可以坚持关闭按钮知道对话框的ID。例如。做类似的事情:
onclick="$( '#demoDialog' ).dialog( 'close' );"
但我宁愿使用通用代码,而不是总是随身携带对话框的 id,以便我可以将其发送到可能关闭它的小部件。
或者我可以记住我在下面多少层:
function selfCloseDialog() { $(this).parent().dialog( 'close' ); }
但我真的希望 selfCloseDialog() 只搜索元素层以寻找要关闭的对话框对象。我该怎么做?
@更新:
所以我让它工作了。感谢大家的建议,这个问题实际上有两个问题。
第一个问题在这里:
<input type='submit' onClick='selfCloseDialog();' value='Ok'/>
应该是:
<input type='submit' onClick='selfCloseDialog(this);' value='Ok'/>
按钮元素不作为函数的“this”参数传入。这现在看起来很明显。
下面的直接方法 JAAulde 有效并且看起来最干净:
function selfCloseDialog( caller ) {
$(caller).closest( ".ui-dialog-content" ).dialog('close');
}
有几个答案涉及最接近的选择器和选择器 - 但我认为除了他建议的普通类选择器之外没有任何理由使用任何东西。
【问题讨论】:
-
检查我的答案,这是投反对票的。但这正是您所需要的!它可以在任何地方工作,甚至可以从 ajax 加载的内容中使用
标签: javascript jquery jquery-ui