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

我假设它是循环的,因为unbind()它没有按照您的预期进行,然后您手动强制每次 ajax 调用成功时单击链接,这可能会一次又一次地运行相同的代码位。

去掉多余的.click()部分,首先弄清楚如何正确解开原始点击,然后click()在需要时重新添加。附带说明一下,由于您使用live()的是绑定,因此使用取消绑定会更有意义.die()(这两种方法也已被替换为.on()and .off()API)

于 2012-06-21T10:48:13.033 回答
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 回答