2011-12-26 93 views
1

我試圖在Dojo自動完成程序中選定的值發生更改時調用java腳本函數,但我無法這樣做。將dojo Autocompleter連接到javascript函數

首先因爲標準onchange屬性在這裏不起作用,因爲這不是標準的HTML組件。

其次,我發現這個文檔(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文件中做到這一點:

<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> 

在js文件做到這一點:

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. 
////////// 

所以這裏會發生什麼事是,每當autocompleter改變時它會通知或發佈聽衆傾聽的話題。現在,在Java腳本的subscribe功能會聽其各自的「主題」,並在該主題發佈後,subscribe將執行裏面的JavaScript函數。

這樣每當autocompleter改變相應的JavaScript函數被調用,因此,我們有一個 - onchange="javascript function" - 樣的效果。

如果您仍然遇到麻煩,請尋求幫助:)。

0

好吧,我猜支柱組成的「autocompleter」是道場的dijit.form.FilteringSelect。 您可以在http://dojotoolkit.org/api找到它的文檔。到那裏後,打開樹並按照路徑dijit/form/FilteringSelect,然後部署「事件摘要」標題。

你會發現的擴展點的名單(說事件......)小部件接受。對你來說正確的一個叫做「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個autocompleters,並且我想將隱藏字段的值設置爲特定的值,這對每個autocompleter都是不同的,那麼這將如何工作?我已經找到了另一種方式。我將它張貼在答案中。請評論,如果你覺得它可以更好。 – kanishk 2011-12-26 14:45:59

+0

所以,你的意思是......任何時候你的一個autocompleters改變了,有一個隱藏的輸入將被設置爲某個東西? – Philippe 2011-12-26 16:00:13

+0

對不起,延遲迴復。是的,這正是我想要的。因爲我想與操作類通信哪個自動完成器已更改。 – kanishk 2011-12-28 06:25:04