給定一個dojo輸入小部件(任何表單小部件),獲取小部件表單元素的最佳方法是什麼?即父元素。從小部件獲取表單父項
即我期待完成這樣的功能:
function getForm(widget) {
return (/**code goes here **/);
}
感謝
給定一個dojo輸入小部件(任何表單小部件),獲取小部件表單元素的最佳方法是什麼?即父元素。從小部件獲取表單父項
即我期待完成這樣的功能:
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節點)。
require(["dijit/registry"], function(registry)
{
var formWidget = registry.getEnclosingWidget(registry.byId('form_element_id').domNode);
});
謝謝你試圖提供幫助。我知道你說過你沒有測試它,但這在Dojo中不起作用。首先,你不能使用.tagName,因爲它會返回類似「div」的東西(考慮到大多數小部件是如何構成的,包括表單)。另外,你說widget可以用在表單之外,我同意,但是我沒有看到你的解決方案是如何工作的,或者是因爲它正在查看祖先標籤,這意味着這個小工具被indeep包裹在一個表單中:) ......無論如何,我會爲我的問題發佈一個答案,我會接受你的解決方案。 – Ayyoudy