2010-04-01 65 views
6

我似乎無法正確地將onchange事件附加到dijit.form.Select小部件。然而,我對網絡開發並不熟悉,所以我可能會做一些完全愚蠢的事情(儘管我儘可能說明了這一點(並且我已經閱讀了所有可以找到的文檔)。我確定body類匹配dojo主題,我爲我使用的所有小部件(和dojo.parser)dojo.require(),並且仍然是nada。我使用的代碼是:我不能上onChange for dijit.form.Select

dojo.addOnLoad(function() { 
    var _query = dojo.query('.toggle'); 
    for (var i in _query) { 
     dojo.connect(_query[i], 'onchange', function (ev) { 
      console.log(ev + ' fired onchange'); 
     }); 
    } 
}); 

任何幫助都將不勝感激。另外:在深入瞭解dijit呈現小部件的內幕之後,我發現,當我將dojoType ='dijit.form.Select'屬性值對添加到我的html元素(以聲明方式執行此操作)時,實際上dijit呈現一行兩列表格。該表的第一個元素是一個跨度(使用類dijitSelectLabel),我假設只顯示選定的(或默認)元素。它的第二個元素似乎是一個按鈕,呈現爲一個向下箭頭,用於響應某些DOM事件來切換菜單的顯示。另外(我認爲這很漂亮),dijit實際上並沒有將選擇選項放在DOM樹中,直到其中一個事件被觸發。我在新的頁面加載之後(在我點擊任何內容之前)查看了螢火蟲中的HTML,並且第二個選項不在任何地方。然後,一旦我點擊箭頭按鈕,就會出現一個dijit.Menu小部件,dijit將dijit.Menu粘貼到body節點的末尾;當我點擊其他地方後,Menu小部件仍然是body的lastChild,現在它只是隱藏並且不附加到form.Select小部件。

如果我只想在DOM樹中放置一個不同的dijit.form小部件,這取決於用戶選擇哪個項目,是否應該真的如此複雜?

結論: 原來這是一個大寫字母問題。

dojo.connect(widget_obj, 'onChange', function_obj); 
作品,而

dojo.connect(widget_obj, 'onchange', function_obj); 
沒有。

所以我說得對,我當時完全傻了。我認爲,因爲全部小寫版本在將html標籤放置爲屬性時起作用,Dojo會將其視爲相同。這很有意義,因爲dijit.form.Select沒有.onchange屬性,但確實有.onChange屬性。 (我最終堅持選擇.FilteringSelect,因爲我沒有給我的用戶任何印象,他們可以鍵入某些東西。)所以,你們哪一個我給出了答案(因爲你們兩個在你的帖子中有變化,我想我太缺乏經驗,無法認識到案件的重要性)?

回答

2

嘗試做一個dojo.connect時,以下幾點:

var inputEvents = []; //Global var 

    inputEvents.push(dojo.connect(dijit.byId(inputFldStr), "onChange", eventFuncObj)); 

存放在全局變量的連接。

+0

我嘗試了dijit.byId(nodeId)和dijit.byNode(節點),兩種方法都沒有奏效。 – yarmiganosca 2010-04-01 20:03:47

1

在您的代碼中,您將處理程序連接到dom節點的'onchange'事件,而不是dojo小部件。 dojo.query返回一個NodeList對象 - 與查詢相匹配的節點集合。
在這種情況下,連接到小部件的'onChange'事件更可靠,如GoinOff所示。除了他的答案之外,請確保您正確地做到了這一點。
假設這是您的html(在更高版本的Dojo中,dijit.form.Select已被替換爲dijit.form。FilteringSelect來):

<input dojoType="dijit.form.FilteringSelect" id="stateInput" store="stateStore" searchAttr="name" name="state"/> 

然後,你需要連接到「的onChange」這種方式(你也可以存儲在一些陣列連接到以後能夠斷開,如GoinOff建議):

dojo.addOnLoad (function() { 
    dojo.connect(dijit.byId("stateInput"), "onChange", function(){}); 
} 

但是如果你不知道你的小部件的id,並想使用dojo.query連接到多個小部件,這是另一回事。

+0

這也不起作用(特別是因爲在小部件之外呈現的選項直到我將其更改爲