Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从小部件获取表单父项_Javascript_Forms_Dojo_Dijit.form - Fatal编程技术网

Javascript 从小部件获取表单父项

Javascript 从小部件获取表单父项,javascript,forms,dojo,dijit.form,Javascript,Forms,Dojo,Dijit.form,给定一个dojo输入小部件(任何表单小部件),获取小部件表单元素的最佳方法是什么?i、 e.父元素 i、 e.我希望完成以下功能: function getForm(widget) { return ( /**code goes here **/); } 谢谢因为表单小部件也可以在表单外部使用,所以我能想到的唯一方法与不使用小部件的情况相同:获取一个开始的dom节点并向上移动,直到到达表单节点: function find_ancestor_of_type(ancestorTag,

给定一个dojo输入小部件(任何表单小部件),获取小部件表单元素的最佳方法是什么?i、 e.父元素

i、 e.我希望完成以下功能:

function getForm(widget) {

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

谢谢

因为表单小部件也可以在表单外部使用,所以我能想到的唯一方法与不使用小部件的情况相同:获取一个开始的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);
}

如果只是查找表单元素,最好是查找输入(或其他表单内容元素)并使用其表单属性。类似于下面的内容

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

对于我所看到的小部件来说是可行的。可能会错过一些小部件,但不要认为会得到误报。

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


谢谢你的帮助。我知道你说过你没有测试它,但这在Dojo中不起作用。首先,您不能使用.tagName,因为它将返回类似“div”的内容(考虑到大多数小部件都是由它构成的,包括表单)。另外,您说过小部件可以在表单之外使用,我同意这一点,但我也不认为您的解决方案会如何工作,因为它正在查看祖先标记,这意味着小部件是以表单形式独立包装的:)。。。无论如何,我会发布一个对我有用的问题的答案,我会接受你的解决方案。
require( ["dijit/registry"], function( registry )
{
    var formWidget = registry.getEnclosingWidget( registry.byId('form_element_id').domNode );
} );