私の HTML フォームには、次のマークアップがあります。
<fieldset>
<legend>
<label> <input type="checkbox" class="warnOnUncheck" /> Include the following data </label>
</legend>
<div class="fieldsetContent">
<!-- and a bunch of <input type="text" /> here. -->
</div>
</fieldset>
DOM 対応で呼び出される 2 つのスクリプトがあります。
- 最初は、チェックボックスがオフの場合にフィールドセットの内容を折りたたんで、
- 2 つ目は
confirm()
、チェックボックスがオフの場合に確認メッセージを表示します。ユーザーが「いいえ」をクリックすると、チェックボックスが再度チェックされます。
問題は、最初のイベント ハンドラーが常に呼び出されるため、ユーザーが [いいえ] をクリックしてもフィールドセットの内容が非表示になることです。
これが私の(要約された)jQueryコードです(DOM対応イベントハンドラー中に呼び出されます):
$("fieldset.collapseable legend input").change(function(event) {
var localFieldsetContent = $(this).closest("fieldset").find("div.fieldsetContent");
var checked = $(this).is(":checked");
if( checked && localFieldsetContent.is(":visible") ) {
// if checked and already visible, then skip entirely.
return;
}
localFieldsetContent.slideToggle(200);
);
$("input[type=checkbox].warnOnUncheck").change( function(event) {
if( !this.checked ) {
var message = $(this).data("warnMessage");
var confirmed = confirm( message );
if( !confirmed ) {
this.checked = true;
event.stopImmediatePropagation();
}
}
} );
私はそれevent.stopImmediatePropagation();
がうまくいくと思っていましたが、そうではありません。
confirmed
が false のときにフィールドセットが折りたたまれないようにするにはどうすればよいですか?