2011-12-26 5 views
1

Dojoオートコンプリータの選択された値が変更されたときにJavaスクリプト関数を呼び出そうとしていますが、実行できません。dojoオートコンプリートをjavascript関数に接続する

最初に標準onchange属性が標準HTMLコンポーネントではないため、ここでは機能しません。

第2に、この文書(http://dojotoolkit.org/reference-guide/quickstart/events.html#connecting-to-a-dom-event)が見つかりました。私の問題を解決するはずです。しかし、どういうわけか私はまだjavascript関数に接続することができません。

これは、これをテストするためのサンプルページです。

JSP:

<s:form id="form"> 
    <sd:autocompleter id="try" list="sampleList"/> 
</s:form> 

JSファイル:

dojo.connect(dojo.byId("try"),"onchange", tryAlert); 

function tryAlert(){ 
    alert('successful'); 
} 

私はドキュメントから間違って解釈しているのか分かりません。

お知らせください。

ありがとうございます!

答えて

2

は私がやってしまったものです。同様の状況にまだまだ立ち向かっている人にとっては、これは参考になります。 JSPファイル内

は、この操作を行います。これをJSファイルで

<s:form id="form"> 
    <s:hidden id="chngd"/> 
    <sd:autocompleter id="try" list="sampleList" valueNotifyTopics="topic"/> 
    /////////// 
    //Here you can put more autocompleters if you need them , Like I needed them 
    /////////// 
</s:form> 

の操作を行います。

dojo.event.topic.subscribe("topic", function(){ 
    dojo.byId('chngd').value='try';// I have set the value of the hidden field to desired value here.... 
    //whatever more you want to do.... 
}); 

////////// 
//Here there would be a subscription (similar to above) for each autocompleter you have put in your jsp. 
////////// 

だからここに何が起こるかを自動入力補完が変更されるたびにそれが通知または公表します、ということですリスナーが聞くトピック。今ではsubscribeのJavaスクリプトの関数は、それぞれの「トピック」を聴いて、そのトピックが公開されると、subscribeはその内部でjavascript関数を実行します。

このようにして、オートコンプリートが変更されると、それぞれのjavascript関数が呼び出されるため、-- 種類の効果があります。

まだ問題が発生した場合は、助けを求めてください:)。

0

[OK]私は、 "autocompleter"のstrutsコンポーネントがdojoのdijit.form.FilteringSelectだと思います。 http://dojotoolkit.org/apiにそのドキュメントがあります。一度そこにツリーを開き、dijit/form/FilteringSelectのパスをたどり、 "Event summary"ヘッダーを展開します。

ウィジェットが受け入れる拡張ポイント(イベントなど)のリストがあります。あなたにとって正しいものは、 "onChange"(首都Cに気をつけてください)と呼ばれています。

また、dojoウィジェットは、dijit.byId( "yourId")からidによって見つかる可能性があります。 - dojo.byIdは、の通常の domノードです。

ので、のonChange拡張ポイントを使用するために、あなたが行う必要があります。

<s:form id="form"> 
    <sd:autocompleter id="try" list="sampleList"> 
     <script type="dojo/method" event="onChange" args="newValue"> 
      alert('successful'); 
     </script> 
</s:form> 

か...あなたはjavascriptの方法を好む場合:ここで

dojo.ready(function(){ 
    dijit.byId("try").onChange = function(newValue) { 
     alert("Changed to new value", newValue); 
    } 
} 
+0

これは参考になります。しかし、私が5つのオートコンプリートを持っていて、隠れたフィールドの値をそれぞれのオートコンプリータごとに異なる特定の値に設定したいのであれば、これはどのように機能しますか?私は別の方法を考え出した。私は答えにそれを掲示しています。あなたがそれが勝ち取ることができると感じたらコメントしてください。 – kanishk

+0

だから、あなたのオートコンプリーターのうちの1つが変わると、何かに設定される隠れた入力が1つありますか? – Philippe

+0

ご返信遅れて申し訳ありません。はい、まさに私が欲しいものです。私は、オートコンプリートが変更されたことをアクションクラスに伝えたいからです。 – kanishk

関連する問題