我正在开发一个使用 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');
}
有几个答案涉及最接近和选择器 - 但除了他建议的普通类选择器之外,我看不出有任何理由使用任何东西。