2009-02-22 68 views
0

因此,我一直在努力研究這一整天,並且無法弄清楚如何使其發揮作用。我有一張TD的表格,裏面充滿了使用JQuery「getJSON」命令從數據庫中繪製的內容。我有一個事件處理程序的設置,因此當你雙擊一個TD元素時,它的內容就成爲一個INPUT元素,其默認值是封閉TD的前一個內容。JQuery:查找創建DOM元素的對象

input元素被命名爲「輸入」像這樣一個Javascript對象內部創建:

var Input = function() { 
    var obj = this; 
    obj.docElement = $('<input/>').attr('type', 'text').val(obj.defaultValue); 
} 

所有這一切都被工作至今。我的問題是,我希望用戶能夠在INPUT被選中表示他們已經完成編輯該字段時按下RETURN鍵。我試過類似以下的東西:

$(obj.docElement).bind('keydown', function(e) { 
    if(e.which == 13) { 
     // do something 
    } 
} 

這適用於您第一次編輯字段;但是,如果您多次編輯一個字段,它將停止工作。此外,如果您隨機雙擊TD,最終會中斷。我測試了它,並確定INPUT元素停止註冊任何類型的事件,就好像「綁定」不再存在一樣。

我做了大量的搜索,並確定放置在INPUT元素上的常規JQuery「綁定」處理程序不可靠。因此,我決定將事件處理程序附加到文檔對象,而不是使用如下:

$(document).bind('keydown', function(e) { 
    // do something 
} 

我知道我可以使用「e.target」得到了動作上執行的目標元素(這適用於我,e.target正確地指向INPUT元素)。

我的問題是,如何獲得創建INPUT元素的對象?我需要能夠執行包含在用於創建INPUT元素的相應「輸入」類別 中的函數。我需要從「$(document).bind」函數中調用這些函數。所以基本上我需要能夠得到一個INPUT元素的父/創建者Input對象。

如果我沒有足夠清楚地解釋任何事情,請讓我知道。任何幫助在這個問題將不勝感激!我也願意提供其他方法的建議(除了使用「$(document).bind」)。

謝謝!

回答

0

我想我明白這個問題...

您可以遍歷DOM尋父文檔元素,但是這不是你的意思,是吧?您需要具有一組邏輯的父級腳本元素對元素進行操作。

我懷疑當創建輸入元素時可能最容易提供某種對父元素的引用......將其傳遞給事件處理函數,或將其設置在全局可訪問的位置(如current_element_parent var) 。

+0

非常感謝!讀完你的答案後,我決定使用嵌套的for-in循環遍歷我的對象層次結構,並檢查每個Input對象的文檔元素是否與傳入的e.target元素對照。也許不是最有效的方式,但現在一切正常!再次感謝! – 2009-02-22 06:04:01

0

我同意tobyhede。您可以將自定義屬性添加到返回父級的INPUT元素,也可以在內存中保存一個將動態創建的INPUT元素映射到創建它的父級的映射。當您捕獲返回鍵時,只需從地圖中刪除關係,以便在用戶再次單擊時再次添加。