2

给定一个 dojo 输入小部件(任何表单小部件),获取小部件的表单元素的最佳方式是什么?即父元素。

即我正在寻找完成这样的功能:

function getForm(widget) {

    return ( /**code goes here **/);
}

谢谢

4

4 回答 4

5

如果您只是在寻找表单元素,您最好找到输入(或其他表单内容元素)并使用其表单属性。类似于以下内容

function getForm(widget) {
   var inputNode = widget.valueNode || widget.focusNode;
   if (inputNode) return inputNode.form;
   return null;
}

适用于我查看的小部件。可能会错过一些小部件,但不要认为你会得到误报。

于 2011-10-26T07:47:04.177 回答
1

由于表单小部件也可以在表单之外使用,所以我能想到的唯一方法与没有小部件的情况相同:获取一个起始 dom 节点并向上移动直到到达一个表单节点:

function find_ancestor_of_type(ancestorTag, node){
    while(node && node.tagName !== ancestorTag){
        node = node.parentNode;
    }
}

function get_form(widget){
    return fund_ancestor_of_type("form", widget.domNode);
}

(虽然我还没有测试过)


顺便说一句,你为什么需要这样做?大多数时候,您可以将大部分逻辑放在表单本身中(如果您愿意,它也可以是 dijit.form.Form)并且输入小部件不需要知道任何相关信息。

于 2011-10-24T22:13:38.660 回答
1

如果表单是 dijit/form/Form,您可以使用 dijit/registry 来获取表单(小部件不仅仅是 DOM 节点)。

require( ["dijit/registry"], function( registry )
{
    var formWidget = registry.getEnclosingWidget( registry.byId('form_element_id').domNode );
} );
于 2012-11-16T15:13:51.070 回答
0

对于那些好奇的人,这对我有用:

function getForm(widget) {

    return (widget.domNode.parentNode);
}
于 2011-10-25T13:18:47.503 回答