0

クリックが送信される前に、アンカーの href を変更しようとしています。

ただし、次の場合は無限ループが作成されます。

$('.preview').live('click', function(e){
    e.preventDefault();
    var _this = this;
    var content = $('#redactor_content').getCode();
    var page_id = $('#page_id').val();
    $.ajax({
        url: ADMIN_CORE_URL + 'pages/autosave.php',
        dataType: 'json',
        type: 'POST',
        data: {page_id : page_id, content : content},
        success: function(data){
            var url = $(_this).attr('href') + data.revision_id;
            $(_this).attr('href', url);
            $(_this).unbind('click').click();
        }
    });
});

クリックして送信できないか、ループが発生します。

ループなしでクリックを再度有効にするにはどうすればよいですか?

4

3 に答える 3

1

このようなことを試すことができます。xそうすれば、リンクにクラス(またはそれを呼び出したいもの)がある場合にのみハンドラーが実行されます。
ajax 応答の後、クラスを削除すると、クリック ハンドラーが実行されなくなります。

$(body).on('click', '.preview.x', function(e){
    e.preventDefault();
    var _this = this;
    var content = $('#redactor_content').getCode();
    var page_id = $('#page_id').val();
    $.ajax({
        url: ADMIN_CORE_URL + 'pages/autosave.php',
        dataType: 'json',
        type: 'POST',
        data: {page_id : page_id, content : content},
        success: function(data){
            var url = $(_this).attr('href') + data.revision_id;


            // $(_this).attr('href', url);
            // $(_this).removeClass('x').click();
            //
            // edit: version 2:
            window.open(url);
        }
    });
});
于 2012-06-21T10:48:44.753 に答える
0

交換

$(_this).unbind('click').click();

$(_this).off('click');

jquery 1.7.2以降.liveは廃止され、.onが使用されます

$('body').on('click','.preview', handler);

バインドを解除した後、 によってクリック イベントをトリガーしています.click()

それを削除すると問題が解決するはずです

編集

var handler = function(event){
    event.preventDefault();
    var _this = this;
    alert('called');
    $(_this).off('click').on(handler);
}


$('body').on('click','.preview', handler);

.on() を使用してイベント ハンドラーをアタッチし、.off() を使用て削除します。

デモ

お役に立てれば

于 2012-06-21T10:49:53.587 に答える
0

が期待どおりに動作せず、ajax 呼び出しが成功するたびに手動でリンクをクリックするように強制しているため、ループしunbind()ていると思います。これにより、おそらく同じコードが何度も実行されます。

余分なものを取り除き、.click()最初に元のクリックを正しくバインド解除する方法を考えてから、click()必要に応じてバックインを追加します. 補足として、バインドに使用しているので、アンバインドlive()に使用する方が理にかなっています(これらの 2 つのメソッドは、その後API.die()に置き換えられました)。.on().off()

于 2012-06-21T10:48:13.033 に答える