2

ボタンがクリックされたときに、すべてのテキスト フィールドをデフォルト値にリセットできるようにしたいと考えています。

これまでに行ったことは、すべてのテキスト フィールドのクエリを実行し、次のように、'textChanged' という名前の関数を変更イベントにバインドすることです。

require(["dojo/on","dojo/query"], function(on,query){
    query(".Text").on("change",textChanged);
});

関数は次のように定義されます。

function textChanged(newVal)
{
...
}

割り当てを行うことで、関数の本体の値をリセットできることがわかりました。

   newVal.target.value = newVal.target.defaultValue;

この関数が変更イベントによってトリガーされた場合。

私がやりたいのは、ボタンがクリックされた場合、 newVal.target.value = newVal.target.defaultValue を実行したいのですが、コンテキストを正しく取得するのに問題があります。

「this」変数が呼び出されたときに「newVal」パラメーターを保持するだけでなく、その変数を保持しようとしました。コンテキスト外で値を設定しようとすると、更新が保持されません。「this」の値を他の値 (nt = this) に設定し、newValue を別の変数 (nv = newValue) に設定してから、実行したいと思います: nv.target.value = nv.target.defaultValue; フォームのフィールドはクリアされますが、フォームが送信されると、実際の値は手動で変更された値のままです。「this」は、ボタンをクリックしたコンテキストで直接呼び出したときに、変更イベントの詩から textChanged が呼び出されたときとは異なることに気付きました。

「ヒッチ」を使用して呼び出して、これのコンテキストを変更イベントからの値に設定しようとしましたが、正しいコンテキストを設定していないようです:

require(["dojo/on", "dojo/_base/lang"], function(on, lang) {
        lang.hitch(nt, textChanged(nv));
});

正確には、textChanged 内で console.log(this); を使用して「this」の値を表示します。テキストが UI から変更されたときに textChanged が呼び出されると、「this」は次のようになります。

それでも、それを呼び出すボタンをクリックして呼び出されると、

lang.hitch(nt, textChanged(nv));

'this' is: Window fauxRedirect.lsw?applicationInstanceId=guid%3A1eae6af09bf6f543%3A-6644aeb4%3A13a8a4c429e%3A-7ffe&zWorkflowState=2&zTaskId=p1&applicationId=2&zComponentName=CoachNG&zComponentId=3028.b1094dc3-da2b-461a-8d56-f6444891c174&zDbg=2#%20 %20

「nt」が実際に同じであることを確認しました」

そのため、「this」がその値に設定されるように textChanged 関数を実行しようとしています。

または、別のコントロールからフィールドをデフォルトにリセットするより良い方法があれば、それも同様に機能します。

前もって感謝します。

4

1 に答える 1

4

あなたがやろうとしていることの完全な文脈がわからないので、これがあなたの質問に答えているかどうかわかりませんか?

dijit/form/Formウィジェットにラップされている限り、フォーム内のすべてのウィジェットをデフォルト値にリセットできます。すべてのウィジェットが正しくラップされている場合は、フォームでreset()を呼び出すだけです。

注意: これはネイティブ要素では機能しません (つまり、標準の <input> または <textarea> フィールド。dijit/form/TextBox などである必要があります)。

例えば:

<form data-dojo-type="dijit/form/Form" data-dojo-id="theForm">
    <label for="field1">Field 1:</label>
    <input
        type="text" id="field1" name="field1" 
        data-dojo-type="dijit/form/TextBox" value="default1"
    /><br />

    <label for="field2">Field 1:</label>
    <input
        type="text" id="field2" name="field2"
        data-dojo-type="dijit/form/TextBox" value="default2"
    />
    <br /><br />

    <button
        type="button" 
        data-dojo-type="dijit/form/Button" 
        onclick="theForm.reset();"
    >Reset</button>
</form>

ここでリセット ボタンをクリックすると、フィールドが field1="default1" および field2="default2" にリセットされます。

フォームは各ウィジェットのreset()メソッドを呼び出しています。独自のウィジェットを作成する場合は、それらのreset()メソッドが正しく機能することを確認する必要があります (値を設定するための_getValueAttr()メソッドも同様です)。

于 2012-10-30T11:33:12.987 に答える