【问题标题】:JQuery: Finding the Object that created a DOM ElementJQuery:查找创建 DOM 元素的对象
【发布时间】: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


    【解决方案1】:

    我想我理解这个问题......

    您可以遍历 DOM 以找到父文档元素,但这不是您的意思,对吧?您希望父脚本元素具有一堆对元素进行操作的逻辑。

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

    【讨论】:

    • 非常感谢!阅读您的答案后,我最终决定使用嵌套的 for-in 循环来遍历我的对象层次结构,并根据传递的 e.target 元素检查每个 Input 对象的文档元素。也许不是最有效的方法,但现在一切正常!再次感谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-21
      • 2011-02-19
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      相关资源
      最近更新 更多