2016-03-22 20 views
0
require(["dijit/form/Button", "dojo/dom", "dojo/domReady!"], function(Button, dom){ 

    // Create a button programmatically: 
    var myButton = new Button({ 
     disabled:true, 
     label: "Click me!", 
     onClick: function(){ 
      // Do something: 
      dom.byId("result1").innerHTML += "Thank you! "; 
     } 
    }, "progButtonNode").startup(); 

}); 

require(["dijit/form/Textarea","dijit/registry","dojo/dom" ,"dojo/on","dojo/domReady!"], function(Textarea,registry,dom,on){ 

    var textarea = new Textarea({ 
     name: "myarea", 
     value: "This is the text area...\n\n\n\n\n\n", 
     style: "width:200px;" 
    }, "myarea").startup(); 

    //disalbe the button... 
    //registry.byId("progButtonNode").set("disabled",true); 

    //test 
    dom.byId("result1").innerHTML += "Good!"; 

    //add onchange event... 
    //var button = registry.byId("progButtonNode"); 
    alert('hi'); 


    on(textarea,"change",function(){ 
     alert('3'); 
     registry.byId("progButtonNode").set("disabled",false); 

    }); 
}); 

上記は私のコードです。dojoでテキストエリアからの変更を検出する方法

私の要件は、テキストエリアから変更を検出し、ボタン有効を設定することです。

未定義のおかげでたくさんの「オン」プロパティを読み取ることができません: キャッチされない例外TypeError:私はエラーを取得しています

(ボタンは、デフォルトでは無効でした)!

+0

あなたがplnkrを作成することができれば、私はあなたを助けることができるあなたはdojo/on例を使用することができます。 –

+0

@nikkwong返信ありがとう、私はそれを最終的に把握する。 :) –

答えて

2

ウィジェットTextareaの変更を検出するには、初期化時にonChangeを使用します。

使用registry.byId()はあなたButtonはANSセットは偽使用法.set()にプロパティdisabledあるwidged取得します。例の作業

https://jsfiddle.net/41epfsdd/

は、私は、これはonChangeウィジェットTextarea内の値を変更し、各キーストロークに解雇することができintermediateChanges: trueを使用していますのでご注意ください。 これを省略するか、代わりにintermediateChanges: falseを使用すると、フィールドがぼやけた場合にのみonChangeイベントが発生します。すでに生成Textareaウィジェットにイベントハンドラを適用する方法についてのあなたのコメントについて :

require(["dijit/form/Button", "dijit/form/Textarea", "dijit/registry", "dojo/dom", "dojo/on", "dojo/domReady!"], function(Button, Textarea, registry, dom, on) { 

    var myButton = new Button({ 
    disabled: true, 
    label: "Click me!" 
    }, "progButtonNode").startup(); 

    var textarea = new Textarea({ 
    name: "myarea", 
    value: "This is the text area...\n\n\n\n\n\n", 
    intermediateChanges: true, 
    onChange: function() { 
     var progButtonNode = registry.byId('progButtonNode'); 
     progButtonNode.set('disabled', false); 
    } 
    }, "myarea").startup(); 
}); 

編集。あなたのコメントに基づいて

require(["dojo/on"], function(on){ 
    on(target, "event", function(e){ 
    // handle the event 
    }); 
}); 

例:

on(this.lastCommentTextArea, 'change', function(event){ 
    // handle the event 
}) 
+0

あなたの答えをありがとう!もう1つの質問ですが、すでにテキストエリアウィジェットを生成している場合はどうしたらいいですか? 'dojo.connect(this.lastCommentTextArea、 'Onchange'、function() { digit.byId(" addCommentButton ")。setAttribute( 'disabled'、false); }); ' これは機能しますが、接続は償却されているので完全ではありません。 –

+1

' dojo.connect'は 'dojo.connect'が推奨されていないため、' dojo.on'を使用してください。このようなことをしてください - dojo.on(this.lastCommentTextArea、 'change'、function(){dijit.byId( 'addCommentButton')。setAttribute( 'disabled'、false);}); ' – Himanshu

+0

はいDojo/onを使用するか、あなたのWidget.on()を使用することを検討してください – GibboK