2012-07-02 39 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