1

我有一个编辑方法,当单击一行时调用它,以设置编辑信息(焦点调用,选择调用以方便输入)......一切正常,无需调用下一个编辑(当一个人到达最后一个行中的元素,我在可观察数组中搜索下一个元素......如果有,它通过再次调用相同的方法移动到下一个元素)。

问题是,当调用此方法时,它会将请求堆叠在内存中,并将每个连续调用都付诸行动。我知道在 jquery 方法上,您可以调用 unbind 方法来释放对同一方法的先前调用,但不确定对淘汰递归函数执行此操作的最佳方法是什么。

有什么建议么?

这是一个小提琴:示例

51号线的电话,

self.editItem(self.items()[index + 1]);

是递归调用,它将 editItem 调用到列表中的下一个项目......第 26 行有一个警报,当 editItem 方法运行时调用它,显示运行中的差异。如果您单击一行,然后单击任何其他行,它可以正常工作,正确选择等等......但是如果您在右侧的最后一个字段上(当它选择下一个可用项目时)进行标签,它开始堆积。

4

1 回答 1

2

您不应该.live在这里使用委托方法,因为每次editItem调用新的 keydown 回调都会添加到早期回调的堆栈中。

所以只需要改变两点:

// change .live('keydown', ...) to .keydown(...) or .bind('keydown', ...)
$('#itemDescriptionEdit').keydown(function (e) {

    // ...

    // and return false at the end of callback to stop event propagation
    return false;
});

更新小提琴:http: //jsfiddle.net/ostgals/GmZjF/4/

于 2013-02-19T19:46:08.740 回答