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

时间:2015-07-10 17:25:32

标签: javascript jquery html css scope

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

我的代码位于以下jfiddle

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

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

供参考: 如果您运行此jfiddle,您会看到双击一遍又一遍。我希望得到同样的效果,但推广到DOM中的任何html类/ id。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是不对的:

$('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
}

你必须传递被点击的元素,而不是选择器来搜索和修改...它不是一回事。请注意,因为evt.currentTarget表示用户单击的元素。也许您必须捕获父元素(.parent())以获取所有数据,但总是尝试发送事件...然后使用currentTarget获取单击的元素。

享受!