我试图在提交点击之前修改锚点中的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();
}
});
});
要么我无法点击提交,要么我得到循环。
如何在没有循环的情况下重新启用点击?
答案 0 :(得分:1)
x
(或任何你想要调用它)时,处理程序才会被执行
在ajax响应之后,删除该类,不再执行click处理程序。
$(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 :(得分:0)
这是循环我假设因为unbind()
没有按照你的预期进行,然后你每次ajax调用成功时都会手动强制点击链接,这可能会一次又一次地运行相同的代码。
带走额外的.click()
并首先确定如何正确解开原始点击,然后在需要时重新添加click()
。作为旁注,由于您使用live()
进行绑定,因此使用.die()
取消绑定会更有意义(此后这两种方法已被.on()
和{{替换1}} API也是)
答案 2 :(得分: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()删除它。
<强> DEMO 强>
希望这有帮助