【发布时间】:2009-02-22 04:31:59
【问题描述】:
所以我整天都在处理这个问题,但我不知道如何让它发挥作用。我有一张 TD 的表格,里面充满了使用 JQuery“getJSON”命令从数据库中提取的内容。我设置了一个事件处理程序,这样当你双击一个 TD 元素时,它的内容就会变成一个 INPUT 元素,默认值为封闭的 TD 以前的内容。
INPUT 元素是在名为“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”)。
谢谢!
【问题讨论】:
标签: javascript jquery dom