2013-07-29 44 views
0

我想有從按鈕改變CSS類「主動」基於表單是否有效與否形態改變事件

所以我有這個聲明位「無效」 ......

<form data-dojo-type="dijit/form/Form" id="myForm" action="http://somthing"> 
<script type="dojo/on" data-dojo-event="change" data-dojo-args="e"> 
// for some reason change returns dom object not dijit object.... 
var self = dijit.byId(this.id); 
require([ 'dojo/dom-class' ], function (domClass) { 
    var tmp, on = 'active' , off = 'inactive'; 
    if (self.get('state')) { 
     // invalid 
     tmp = off; off=on; on=tmp; 
    } 
domClass.replace('complete', on, off); 
}); 
</script> 
..rest of form and submit button with id='complete' is here. 

該腳本旨在根據表單是否有效更改提交按鈕的類別。我的第一個問題是,爲什麼這個例程將DOM對象取爲this而不是Dijit對象,因爲這些示例似乎暗示我應該獲取後者。我的第二個問題是我是否應該以更好的方式做到這一點?

回答

1

檢查您收到的事件的target屬性:你最有可能接受它關閉的形式,起泡(通過HTML事件冒泡)了從您形式的實際控制權。這是一個本地DOM事件,而不是更高級別的Dojo事件,因此this是DOM節點。

有時使用簡單的舊JavaScript代碼代替dojo/on腳本更容易,並且使用dojo/on手動訂閱。沒有什麼神奇的,你可以看到你訂閱到底該怎麼那麼:

require(['dojo/on'], function (on) { 
    var myForm = dijit.byId("myForm"); 
    on(form, "change", function(evt) { 
    // Handle the event here, referring to myForm rather than trying to 
    // work with 'this'. 
    }); 
}); 

更多的例子,包括檢查的有效性,地址爲:http://dojotoolkit.org/reference-guide/1.9/dijit/form/Form.html#using-native-form-elements

+0

是的,我得到的印象是,我有時會試着吞下整個道場哲學的鉤線和沉降片,當有可能是一個更簡單的方法。從這些例子中,我預計會得到更高層次的事件。例如,你給出的頁面通過'dojo/on'獲取'submit'事件,並且期望'this'是Dojo對象,而不是DOM對象,調用'this.validate()' – vogomatix

+0

我的團隊和我從來沒有使用dojo/on