有沒有辦法阻止onChange事件調用reset()
功能的時候,現在,看着the code被觸發,當您使用dijit/form/Form::reset()
是,它會調用形式的每一個後代窗口小部件的reset()
功能會發生什麼:
reset: function(){
array.forEach(this._getDescendantFormWidgets(), function(widget){
if(widget.reset){
widget.reset();
}
});
},
復位功能(窗體部件從_dijit/form/_FormValueMixin
繼承的至少全部)是implemented這樣的:
reset: function(){
this._hasBeenBlurred = false;
this._setValueAttr(this._resetValue, true);
}
正如你所看到的,它只是簡單地調用_setValueAttr()
並且定義了第二個參數(它觸發了更改事件)。
所以,改變這種行爲的唯一方法是通過重寫必要的方法來實現它。例如:
var MyForm = declare("my/Form", [ Form ], {
reset: function(priorityChange) {
array.forEach(this._getDescendantFormWidgets(), function(widget){
if(widget.reset) {
widget.reset(priorityChange);
}
});
}
});
var myTextBox = declare("my/TextBox", [ TextBox ], {
reset: function(priorityChange) {
this._hasBeenBlurred = false;
this._setValueAttr(this._resetValue, priorityChange);
}
});
這使您可以添加一個名爲priorityChange
到reset()
功能參數,它允許您觸發事件(或沒有)。
完整的例子可以的jsfiddle發現:http://jsfiddle.net/f954z/
如果你不想重新實現所有表單控件的reset()
功能(我只是做dijit/form/Form
和dijit/form/TextBox
),那麼最好你能do是打開票並希望它得到實施。
謝謝,已經很久了,我不得不回去看看我最終做了什麼。我實際上在我的應用程序中爲每個表單創建了一個重置,並且它實質上是通過.set然後是._lastValueReported對錶單中每個元素進行重置。 – user2638303