代码之家  ›  专栏  ›  技术社区  ›  Shailesh Kumar

为什么输入元素的父节点未定义?

  •  0
  • Shailesh Kumar  · 技术社区  · 16 年前

    我有一个表,其中动态地添加了一些行,在新行中,我添加了一个输入文本元素。当输入元素中的文本更改时,我希望访问父行并围绕它做一些事情。但我的代码无法访问输入元素的父节点。下面是代码示例。为什么会这样?有什么工作要做吗?

    创建行的过程如下:

    var newRow = document.createElement('tr');
    dojo.place(newRow, row, "after");
    var td = document.createElement('td');
    dojo.place(td, newRow, 'last');
    dojo.attr(td, 'colspan', 2);
    dojo.place(document.createTextNode('Track id:'), td, 'last');
    var input = document.createElement('input');
    dojo.place(input, td, 'last');
    dojo.attr(input, 'type', 'text');
    dojo.attr(input, 'value', 0);
    dojo.attr(input, 'onchange', "JavaScript: onTrackIdChange(event);");
    

    的初始部分 onTrackIdChange 看起来像:

    function onTrackIdChange(event)
    {
    var textbox  = event.target;
    console.log(textbox);
    // lets find the parent row
    var row = findParentRow(btn);
    

    findparentrow的实现如下:

    function findParentRow(node)
    {
        var parent = node;
        do
        {
            console.log(parent);
            parent = parent.parentNode;
        }
        while (parent.nodeName != 'TR');
        return parent;
    }
    

    findparentrow函数失败,因为它表示未定义输入元素的父级。

    2 回复  |  直到 16 年前
        1
  •  3
  •   David Hedlund    16 年前

    在你的电话里, findParentRow(btn) 你不应该路过吗? textbox 而不是 btn ?

    没有提到这个 英国电话号码 变量在您提交的代码中的其他地方,所以如果这是正确的,您应该发布更多与之相关的代码。

        2
  •  0
  •   Paul Butcher    16 年前

    未定义父级,因为未定义节点。未在FindParentRow中定义节点,因为在OnTrackIDChange中未定义BTN。