垃圾收集 - Javascript - 释放一个记忆函数
garbage collection - Javascript - free a memorized function
我必须说我不知道正确的术语,所以请原谅我的一些错误。我有一个带有行的表格。表中最后一行的最后一列是使用 Tab 键启用的,该键会自动创建新行。
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();
};
您正在取消绑定事件处理程序,然后立即将同一事件处理程序重新应用于同一元素。您需要重新组织代码,以便在创建新行时将事件处理程序绑定到新元素 http://jsfiddle.net/2fLrsjcz/
var currentTable = $('table');
function bindKeyDown(lastEditable) {
lastEditable.keydown(function(e) {
if(e.keyCode == 9) {
createNewRow($(this));
}
});
}
function getLastEditable() {
return currentTable
.find("tr")
.find('textarea, .cleanbox-editable-cell')
.not(function(index, element) {
return $(element).parent().css("display") == "none";
})
.last();
}
function createNewRow($lastEditable) {
var newEditable = $lastEditable.parent().parent().clone().appendTo(currentTable);
$lastEditable.unbind("keydown");
bindKeyDown(getLastEditable());
}
bindKeyDown(getLastEditable());
为了改进这篇文章可能对其他人有用,研究 Lee 的代码,我已经解决了我的问题,只需将 lastEditable.unbind("keydown") 移动到 .keydown(function(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();
}
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟