2012-07-02 52 views
1

當從一個不同的元素觸發另一個事件時,我在將一個事件綁定到一個元素時遇到了很多麻煩。 我的HTML是一個文本框,當添加一些文本時,它會創建一個含有暗示的上下文菜單。由於這個菜單是一個動態創建的表,我想將一個click事件綁定到它的元素。所以,這是我的代碼:jQuery - 一次綁定一個事件

$("#TextBox").on("keypress", function(e) { 
    $("#Menu").find("td").on("click", function(event) {  
     event.stopPropagation(); 
     event.preventDefault(); 
     processText(event, $(this).children().text()); 
    }); 
    $(this).off(e); 
}); 

但是,我不知道爲什麼,它不起作用。另外,我已經嘗試創建一個變量並將其用作標誌,但也不起作用。

如果我只是不解除綁定它,觸發點擊事件多次,因爲用戶按下一個鍵。但是我想解除它,所以它只執行一次。

編輯:錯誤是我正在處理不正確的事件。我不得不處理「keyup」,因爲在「keypress」中表格仍然不存在。

+0

你連接上每個按鍵各'td'一個新的'click'事件(不刪除舊的)...這是* *幾乎肯定不是你想要的。您應該只需要在「keypress」處理程序之外綁定一次。 – Matt

回答

2

由於您已經在使用on功能。使用備用版本(的事件處理代表團)對綁定的事件處理程序來動態地添加元素:

使用的功能如下:

$("#TextBox").on("keypress", function(e) { 
    $(this).off("keypress"); 
}); 

$("#Menu").on("click", "td", function(event) {  
     event.stopPropagation(); 
     event.preventDefault(); 
     processText(event, $(this).children().text()); 
}); 

檢查此鏈接瞭解更多信息:http://api.jquery.com/on/#direct-and-delegated-events

+0

但我不能這樣做,因爲$(「#Menu」)仍然不存在,它是在用戶按下文本框中的按鍵時動態創建的。 – synack

+0

@ Kits89:當你創建菜單項時,如果不是將委託改變爲'$(「body」),那麼你有一個特定的元素被附加到它上面on(「click」,「#Menu td」,function ){' – Chandu

+0

+1謝謝,我用解決方案編輯過,這是我的錯,對不起! – synack