Javascript-释放一个记忆函数
我必须说,我不知道正确的术语,所以请原谅我的一些错误。 我有的是一张有行的桌子。表中最后一行的最后一个可编辑列使用TabKey启用,TabKey会自动创建新行Javascript-释放一个记忆函数,javascript,garbage-collection,Javascript,Garbage Collection,我必须说,我不知道正确的术语,所以请原谅我的一些错误。 我有的是一张有行的桌子。表中最后一行的最后一个可编辑列使用TabKey启用,TabKey会自动创建新行 function enableTab() { lastEditable = currentTable .find("tr") .find('textarea, .cleanbox-editable-cell') .not(function(index, element) { return $(e
function enableTab() {
lastEditable = currentTable
.find("tr")
.find('textarea, .cleanbox-editable-cell')
.not(function(index, element) {
return $(element).parent().css("display") == "none";
})
.last();
lastEditable.unbind("keydown");
lastEditable.keydown(function(e) {
var keyCode = e.keyCode || e.which;
createNewRow();
};
};
function createNewRow() {
createRow();
enableTab();
}
创建新行时,将重新计算lastEditable变量。
我希望lastEditable仅与最后一行的最后一列相关联。无论如何,当我只希望新行能够执行这样的功能时,会创建一个新行,并为新行和上一行的最后一列提供创建新行的功能
因此,在我看来,每次创建新行时,变量lastEditable都正确地关联到新行的最后一列。但是之前与同一变量关联的对象的函数没有被删除:它不再有名称
我说得对吗?如何删除对象
我尝试了以下方法,但无效:
lastEditable.keydown(function(e) {
var keyCode = e.keyCode || e.which;
delete lastEditable;
createNewRow();
};
您正在解除事件处理程序的绑定,然后立即将同一事件处理程序重新应用于同一元素。您需要重新组织代码,以便在创建新行时将事件处理程序绑定到新元素
为了改进这篇可能对其他人有用的文章,研究Lee的代码,我解决了我的问题,只需将lastEditable.unbind(“keydown”)移动到.keydown(函数(e){}),如下所示:
function enableTab() {
lastEditable = currentTable
.find("tr")
.find('textarea, .cleanbox-editable-cell')
.not(function(index, element) {
return $(element).parent().css("display") == "none";
})
.last();
lastEditable.keydown(function(e) {
var keyCode = e.keyCode || e.which;
lastEditable.unbind("keydown");
createNewRow();
};
};
function createNewRow() {
createRow();
enableTab();
}
function enableTab() {
lastEditable = currentTable
.find("tr")
.find('textarea, .cleanbox-editable-cell')
.not(function(index, element) {
return $(element).parent().css("display") == "none";
})
.last();
lastEditable.keydown(function(e) {
var keyCode = e.keyCode || e.which;
lastEditable.unbind("keydown");
createNewRow();
};
};
function createNewRow() {
createRow();
enableTab();
}