1. ホーム
  2. javascript

[解決済み] jQuery UI - 外でクリックされたらダイアログを閉じる

2022-05-13 21:53:34

質問

特定の要素がクリックされたときに表示されるjQuery UIダイアログがあります。 これらのトリガーとなる要素またはダイアログ自体以外の場所でクリックが発生した場合、ダイアログを閉じたいと思います。

以下は、ダイアログを開くためのコードです。

$(document).ready(function() {
    var $field_hint = $('<div></div>')
        .dialog({
            autoOpen: false,
            minHeight: 50,
            resizable: false,
            width: 375
        });

    $('.hint').click(function() {
        var $hint = $(this);
        $field_hint.html($hint.html());
        $field_hint.dialog('option', 'position', [162, $hint.offset().top + 25]);
        $field_hint.dialog('option', 'title', $hint.siblings('label').html());
        $field_hint.dialog('open');
    });
    /*$(document).click(function() {
        $field_hint.dialog('close');
    });*/
});

最後の部分のコメントを外すと、ダイアログは開きません。これは、ダイアログを開くのと同じクリックが、再びダイアログを閉じているからだと思います。


最終的な動作コード

注:これは jQuery の外部イベント プラグイン

$(document).ready(function() {
    // dialog element to .hint
    var $field_hint = $('<div></div>')
            .dialog({
                autoOpen: false,
                minHeight: 0,
                resizable: false,
                width: 376
            })
            .bind('clickoutside', function(e) {
                $target = $(e.target);
                if (!$target.filter('.hint').length
                        && !$target.filter('.hintclickicon').length) {
                    $field_hint.dialog('close');
                }
            });

    // attach dialog element to .hint elements
    $('.hint').click(function() {
        var $hint = $(this);
        $field_hint.html('<div style="max-height: 300px;">' + $hint.html() + '</div>');
        $field_hint.dialog('option', 'position', [$hint.offset().left - 384, $hint.offset().top + 24 - $(document).scrollTop()]);
        $field_hint.dialog('option', 'title', $hint.siblings('label').html());
        $field_hint.dialog('open');
    });

    // trigger .hint dialog with an anchor tag referencing the form element
    $('.hintclickicon').click(function(e) {
        e.preventDefault();
        $($(this).get(0).hash + ' .hint').trigger('click');
    });
});

どのように解決するのですか?

をチェックしてください。 jQuery Outside Events プラグイン

できるようにする。

$field_hint.bind('clickoutside',function(){
    $field_hint.dialog('close');
});