2009-02-22 65 views
0

因此,我一直在努力研究这一整天,并且无法弄清楚如何使其发挥作用。我有一张TD的表格,里面充满了使用JQuery“getJSON”命令从数据库中绘制的内容。我有一个事件处理程序的设置,因此当你双击一个TD元素时,它的内容就成为一个INPUT元素,其默认值是封闭TD的前一个内容。JQuery:查找创建DOM元素的对象

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”)。

谢谢!

回答

0

我想我明白这个问题...

您可以遍历DOM寻父文档元素,但是这不是你的意思,是吧?您需要具有一组逻辑的父级脚本元素对元素进行操作。

我怀疑当创建输入元素时可能最容易提供某种对父元素的引用......将其传递给事件处理函数,或将其设置在全局可访问的位置(如current_element_parent var) 。

+0

非常感谢!读完你的答案后,我决定使用嵌套的for-in循环遍历我的对象层次结构,并检查每个Input对象的文档元素是否与传入的e.target元素对照。也许不是最有效的方式,但现在一切正常!再次感谢! – 2009-02-22 06:04:01

0

我同意tobyhede。您可以将自定义属性添加到返回父级的INPUT元素,也可以在内存中保存一个将动态创建的INPUT元素映射到创建它的父级的映射。当您捕获返回键时,只需从地图中删除关系,以便在用户再次单击时再次添加。