2011-10-24 20 views
2

dojo入力ウィジェット(任意のフォームウィジェット)を指定すると、ウィジェットのフォーム要素を取得する最良の方法は何ですか?すなわち親要素。ウィジェットからフォームの親を取得

私はこのような機能を完了するために探しています。すなわち:

function getForm(widget) { 

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

おかげ

答えて

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); 
} 

(私はまだかかわらず、これをテストしたhavent)


ところで、なぜこれを行う必要がありますか?たいていの場合、ほとんどのロジックをフォームに入れることができます(必要な場合はdijit.form.Formでもかまいません)。入力ウィジェットはそれについて何も知る必要はありません。興味がある人のために

+0

ありがとうございました。私はあなたがあなたがそれをテストしていないと言ったことは知っていますが、これはDojoではうまくいきません。まず、.tagNameを使用することはできません。これは、 "div"(フォームを含むほとんどのウィジェットがどのように作られているかを考慮して)を返すためです。また、ウィジェットはフォームの外で使うことができますが、私は同意しますが、ウィジェットがフォームでラップされていることを意味する祖先タグを見ていると、あなたのソリューションがどのように機能するかはわかりません:) ...とにかく、私は私のために働いた私の質問への回答を掲示し、とにかくあなたのソリューションを受け入れます。 – Ayyoudy

0

、これは私のために働いていたものです:

function getForm(widget) { 

    return (widget.domNode.parentNode); 
} 
5

あなたは、単にフォーム要素を探しているなら、あなたが入力(または他の形式のコンテンツ要素を)見つける方が良いかもしれませんし、そのフォームプロパティを使用します。次のようなもの

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

私が見たウィジェットではうまくいくはずです。いくつかのウィジェットを見逃しているかもしれませんが、誤ったポジティブな結果を招くとは思わないでしょう。

1

フォームがdijit/form/Formの場合は、dijit/registryを使用してフォーム(DOMノードだけでなくウィジェット)を取得できます。

require(["dijit/registry"], function(registry) 
{ 
    var formWidget = registry.getEnclosingWidget(registry.byId('form_element_id').domNode); 
}); 
関連する問題