1

当触发来自不同元素的另一个事件时,我在将事件绑定到元素时遇到了很多麻烦。我的 HTML 是一个文本框,当添加一些文本时,它会创建一个带有提示的上下文菜单。由于此菜单是动态创建的表,我想将单击事件绑定到其元素。所以,这是我的代码:

$("#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”中表格仍然不存在。

4

2 回答 2

4

如果您真的只希望事件触发一次,您可以使用 $.one() 进行绑定。

http://api.jquery.com/one/

于 2012-07-02T13:03:10.333 回答
2

由于您已经在使用该on功能。使用 on 的替代版本(用于事件处理的委派)将事件处理程序绑定到动态添加的元素:

使用 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

于 2012-07-02T13:00:36.827 回答