私は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()で、閉じるダイアログオブジェクトを探している要素のレイヤーを探し出すだけで済みます。どうすればよいですか?
@アップデート:
だから私はそれを動かしました。皆さんの提案に感謝します。問題には実際に2つの問題がありました。
最初の1つの問題はここにありました:
<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');
}
最も近いものとセレクターに関するいくつかの答えがありましたが、彼が提案するプレーンなクラスセレクター以外のものを使用する理由はわかりません。