给定一个dojo输入小部件(任何表单小部件),获取小部件表单元素的最佳方法是什么?即父元素。
即。我希望完成这样的功能:
function getForm(widget) {
return ( /**code goes here **/);
}
由于
答案 0 :(得分:5)
如果您只是在寻找表单元素,那么最好找到输入(或其他表单内容元素)并使用其表单属性。类似于以下内容
function getForm(widget) {
var inputNode = widget.valueNode || widget.focusNode;
if (inputNode) return inputNode.form;
return null;
}
适用于我看过的小部件。可能会错过一些小部件,但不要以为你会得到误报。
答案 1 :(得分: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),输入窗口小部件不需要了解它。
答案 2 :(得分:1)
如果表单是dijit / form / Form,您可以使用dijit / registry来获取表单(窗口小部件不仅仅是DOM节点)。
require( ["dijit/registry"], function( registry )
{
var formWidget = registry.getEnclosingWidget( registry.byId('form_element_id').domNode );
} );
答案 3 :(得分:0)
对于那些好奇的人来说,这对我有用:
function getForm(widget) {
return (widget.domNode.parentNode);
}