繁体   English   中英

从小部件获取表单父级

[英]Get form parent from a widget

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

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

function getForm(widget) {

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

谢谢

如果您只是在寻找form元素,那么最好找到输入(或其他form内容元素)并使用其form属性。 像下面这样的东西

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

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

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

require( ["dijit/registry"], function( registry )
{
    var formWidget = registry.getEnclosingWidget( registry.byId('form_element_id').domNode );
} );

由于表单小部件也可以在表单外部使用,因此我能想到的唯一方法与没有小部件时的方法相同:获取一个起始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),而输入小部件则不需要了解任何信息。

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

function getForm(widget) {

    return (widget.domNode.parentNode);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM