分离函数时变量不记得自己

Variable Not Remembering Itself When Separating Functions

本文关键字:记得 自己 变量 函数 分离      更新时间:2023-09-26

作为我之前的问题和这个答案的扩展(https://stackoverflow.com/a/31327605/1582712),我试图调整我的JavaScript代码,所以我在其他类中使用相同的双击功能。

我的代码如下jfiddle

如果你尝试双击H3或表,它们似乎不会回来。我认为原因是因为$el变量没有被正确注册和/或记住。

我已经尝试了一些事情,例如返回$el变量并重用它。我尝试使用$el[search]数组,所以每个都是唯一的。没有工作。我有点难住了,我认为这是一个微妙的JavaScript内存问题!

供参考:如果你运行这个jfiddle,你会看到双击一遍又一遍地工作。我希望得到同样的效果,但推广到任何html类/id在DOM。

问题是,您不仅隐藏了元素,而且还从DOM中删除了它们(JSFiddle中的第25行)。删除它们后,您还调用hide(第17行),然后调用toggle(第18行),但这些元素不再存在于hidetoggle。您可以通过删除$rowsToHide.hide();(第17行)和$rowsToHide.remove();(第25行)来解决这个问题。请看这个更新过的JSFiddle。这将隐藏元素,但不会从DOM中删除它们。

这是不对的:

$('table#safe-distances-table').dblclick(function () {
    handleDoubleClick('tr.no-impact');
});
function handleDoubleClick(search) {
    var $el = $(this);
    // rest of the code
}

试着这样做:

$('table#safe-distances-table').dblclick(function (evt) {
    handleDoubleClick(evt.currentTarget);
});
function handleDoubleClick(el) {
    var $el = $(el);
    // rest of the code
}

你必须传递被点击的元素,而不是一个选择器来搜索和修改…这不是一回事。要小心,因为这种事会发生。currentttarget表示用户单击的元素。也许你必须捕获父元素(.parent())以获得所有数据,但总是尝试发送事件…然后使用currentttarget获取被点击的元素。

享受吧!