我有一个AJAX调用:
$('a.delete_task').live('click', function() {
$this = $(this);
function deleteFunction(){
var obj = $this.parents('.task');
$(obj).addClass('highlighted');
$.post($this.attr('href'), { _method: 'delete' }, function(data) {
if ( $single_item_collection == true ) {
} else {
};
});
};
SSK.confirm_delete($this, deleteFunction, "task");
return false;
});
然后我拿走我的deleteFunction()
并将其扔进delete_confirmation
:
$(function(){
window.SSK = new(Class.extend({
confirm_delete: function(obj, action, label){
$(".confirm-deletion").live("click", function(){
action.call(obj);
$(this).parents("#delete-message").fadeOut();
return false;
});
},
问题在于,当我第一次点击它时。当我第二次点击它时,它会通过第一个$(this)
和第二个$(this)
。同样,当我第三次点击另一个项目时,它会尝试并通过所有三个项目,依此类推。
不知何故,它正在缓存$(this)
。就像疯了一样。每当方法再次通过时传递它。
确认删除功能会创建一个弹出窗口,并将您最初点击的链接方法作为变量obj
传递给它。
然后,如果您单击确认,则执行以下操作:
$(".confirm-deletion").live("click", function(){
action.call(obj);
$(this).parents("#delete-message").fadeOut();
return false;
});
答案 0 :(得分:1)
不,这肯定不是疯狂的缓存。阅读https://developer.mozilla.org/en/JavaScript/Reference/Operators/this并重写confirm_delete
和/或deleteFunction
。
我非常确定您需要将$(this)
放入点击处理程序闭包中的缓存值,然后在deleteFunction
中使用它。
答案 1 :(得分:1)
每次用户点击“delete_task”时,您都会向元素“confirm-deletion”添加点击事件。这就是为什么click事件多次触发,它实际上已被多次添加。