5

彼ら!

以下の問題を解決するために最善を尽くしていますが、何時間も経っても正しいパスを見ることができません! 説明させてください:

  • a-href (#opener) 要素があり、クリックすると jQueryUI モーダル ダイアログが起動し、div (#target) 内の URL を ajax でロードします。
  • すべてが完璧に機能しますが、これは一度実現してほしいです!
  • モーダル ウィンドウをロードした後、クラス (.deactivated) を #opener a-href に設定し、ID (#opener) を削除して、アクションが再び起動されるのを防ぐことができましたが、機能しません... a-href は引き続きクリック可能で、クリックするたびにモーダル ウィンドウ (#target) が開きます。
  • 私が見つけた唯一の解決策は、a-href を DOM から完全に削除することでした --- $(this).fadeOut(); を使用します。--- しかし、私のリンク #opener が空中で消えてしまうので、本当に醜いです。

何か案は?ありがとうございます。G.

<script>
$(document).ready(function() {
    $('#opener').click (function() {

        $('#target').load ('http://my.url', function(){
            $('#target').dialog({
                title: 'My Title',
                draggable: true,
                dialogClass:'My Class',
                modal: true,
                hide: { effect: 'fade', speed: 'fast' },
                show: { effect: 'fade', speed: 'fast' },
                closeOnEscape: true,
                closeText: 'Close',
                beforeClose: function(event, ui) { 
                   'window.location.reload(true)'
                },
            });//end dialog   
        });
        $(this).addClass('.deactivated');
        $(this).removeAttr('id');
    });
});

4

4 に答える 4

8

要素から ID を削除しても、その要素にバインドされているハンドラーは削除されません (「イベント委任」を使用していない場合)。

(または obsolete.oneの代わりに)を使用してクリック イベントにバインドすると、最初の起動後にハンドラーが自動的にアンバインドされます。.on.bind

$('#opener').one('click', ...)

または、クリック ハンドラー内でイベントを無効にします。

$('#opener').on('click', function() {
    ...
    $(this).off('click').addClass('.deactivated');
});

注意: 、 、 などの代わりに常に新しい (または ) および 関数を使用することをお勧めします.on.oneこれにより、イベント処理コードの一貫性が高まり、イベント ハンドラーの登録または (パラメーターなしで)のトリガーの両方に使用できる方法との混乱が回避されます。イベントハンドラ。.off.bind.click.click

于 2013-03-15T12:54:09.793 に答える
4

説明

.one()、要素のイベントにハンドラーをアタッチします。ハンドラは要素ごとに最大 1 回実行されます。

$('#opener').one('click',function(){
     //your code
    });
于 2013-03-15T12:53:05.740 に答える
2

この関数を使用して.one()、1 回だけ起動するイベント ハンドラーを設定し、それ自体を削除できます。

$('#opener').one('click', function(event) {
    // your code here
});
于 2013-03-15T12:54:13.103 に答える
2

使用one:

$('#opener').one("click", function() {

});

http://api.jquery.com/one/

于 2013-03-15T12:55:02.503 に答える