所以我整天都在努力工作,我无法弄清楚如何让它发挥作用。我有一个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元素停止注册任何类型的事件,就好像它上面不再存在“bind”一样。
我做了大量的谷歌搜索并确定放置在INPUT元素上的常规JQuery“绑定”处理程序是不可靠的。因此,我决定使用以下内容将事件处理程序附加到文档对象:
$(document).bind('keydown', function(e) {
// do something
}
我知道我可以使用“e.target”获取执行操作的目标元素(这对我有用,e.target正确引用INPUT元素)。
我的问题是,如何首先获得创建INPUT元素的对象?我需要能够执行相应“输入”中包含的功能 用于创建INPUT元素的类。我需要在“$(document).bind”函数中调用这些函数。所以基本上我需要能够获得一个INPUT元素的父/创建者输入对象。
如果我没有清楚地解释清楚,请告诉我。任何有关此事的帮助将不胜感激!我也愿意接受替代方法的建议(除了使用“$(document).bind”)。
谢谢!
答案 0 :(得分:0)
我想我理解这个问题......
您可以遍历DOM以查找父文档元素,但这不是您的意思,对吧?您希望父脚本元素具有对该元素进行操作的一堆逻辑。
我怀疑在创建输入元素时向父类提供某种引用可能最简单...将其传递给事件处理程序,或将其设置在全局可访问的位置(如current_element_parent var)。
答案 1 :(得分:0)
我同意tobyhede。您可以将自定义属性添加到引用回父项的INPUT元素,也可以将内存中的映射保存为将动态创建的INPUT元素映射到创建它的父项。当您捕获Return键时,只需从地图中删除该关系,以便在用户再次单击它时再次添加该关系。