2013-02-19 30 views
1

我有一個編輯方法,當單擊一行時調用,以設置編輯信息(焦點調用,選擇調用以方便輸入)......一切正常工作,沒有一個調用到下一個編輯時(當一個人到達行中的最後一個元素時,我在可觀察數組中搜索下一個元素...如果有一個元素,則通過再次調用相同的方法移動到下一個元素)。方法調用多次,而不是一次

問題是,當調用此方法時,它會將請求存儲在內存中,並且每次連續調用都會執行。我知道在jQuery的方法,你可以調用解除綁定方法釋放以前調用相同的方法,不知道什麼是最好的方法來做這個敲除遞歸函數會。

有什麼建議嗎?

這裏是一個小提琴:Example

上線51的電話,

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

是調用editItem到列表中的下一個項目遞歸調用...有上線26的警告當editItem方法運行時會調用它,顯示運行中的差異。如果你點擊一行,然後點擊任何其他行,它會正常工作,選擇正確,等等......但是如果你在右邊的最後一個字段(當它選擇下一個可用項目時)選項卡,它開始堆疊。

+0

請在重建的jsfiddle您的綁定/調用的方法或問題的例子。如果不查看代碼,這很難幫助。 – 2013-02-19 17:35:10

+0

我正在處理它,將採取一些代碼的抽象,讓它在jsfiddle中編碼,我想發佈以查看是否有人以前有類似的問題。 – 2013-02-19 18:08:44

+0

添加小提琴以更簡化的示例顯示問題,您可以非常好地刪除第28-37行以及使其更清潔。 – 2013-02-19 18:51:39

回答

2

您不應該在這裏使用委託方法.live因爲每次調用新的keydown回調editItem被添加到早期回調的堆棧。

所以只是兩件事情改變:

// 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/

+0

太棒了,非常感謝你,工作得很好。 – 2013-02-19 19:55:06