我试图在提交点击之前修改锚点中的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();
}
});
});要么我不能点击提交,要么我得到了循环。
如何在没有循环的情况下重新启用单击?
发布于 2012-06-21 18:48:45
你可以试试这样的东西。这样,只有当链接具有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);
}
});
});发布于 2012-06-21 18:48:13
我假设它是循环的,因为unbind()没有执行预期的操作,然后每次ajax调用成功时都手动强制单击链接,这可能会一次又一次地运行相同的代码。
去掉额外的.click(),并弄清楚如何正确地解除原始点击的绑定,然后如果需要的话,再把click()添加回来。顺便说一句,既然您使用live()来绑定,那么使用.die()来解除绑定会更有意义(这两种方法后来也被.on()和.off() API所取代)
发布于 2012-06-21 18:49:54
替换
$(_this).unbind('click').click();使用
$(_this).off('click');从jQuery1.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()将其移除。
希望这能有所帮助
https://stackoverflow.com/questions/11136433
复制相似问题