Javascript 从小部件获取表单父项
给定一个dojo输入小部件(任何表单小部件),获取小部件表单元素的最佳方法是什么?i、 e.父元素 i、 e.我希望完成以下功能: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,
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 );
} );