首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新启用preventDefault

重新启用preventDefault
EN

Stack Overflow用户
提问于 2012-06-21 18:43:45
回答 3查看 1.9K关注 0票数 0

我试图在提交点击之前修改锚点中的href。

然而,下面的代码创建了一个无限循环:

代码语言:javascript
复制
$('.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();
        }
    });
});

要么我不能点击提交,要么我得到了循环。

如何在没有循环的情况下重新启用单击?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-21 18:48:45

你可以试试这样的东西。这样,只有当链接具有x类(或您想要调用它的任何名称)时,才会执行处理程序。

在ajax响应之后,删除该类,不再执行click处理程序。

代码语言:javascript
复制
$(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);
        }
    });
});
票数 1
EN

Stack Overflow用户

发布于 2012-06-21 18:48:13

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

去掉额外的.click(),并弄清楚如何正确地解除原始点击的绑定,然后如果需要的话,再把click()添加回来。顺便说一句,既然您使用live()来绑定,那么使用.die()来解除绑定会更有意义(这两种方法后来也被.on().off() API所取代)

票数 0
EN

Stack Overflow用户

发布于 2012-06-21 18:49:54

替换

代码语言:javascript
复制
$(_this).unbind('click').click();

使用

代码语言:javascript
复制
$(_this).off('click');

从jQuery1.7.2开始,不推荐使用.live,而是使用.on

代码语言:javascript
复制
$('body').on('click','.preview', handler);

解绑后,.click()会触发点击事件。

删除它应该可以解决这个问题

编辑

代码语言:javascript
复制
var handler = function(event){
    event.preventDefault();
    var _this = this;
    alert('called');
    $(_this).off('click').on(handler);
}


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

使用.on()附加事件处理程序,使用.off()将其移除。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11136433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档