2011-08-01 14 views
1

幫我理解這一點。爲什麼FilteringSelect以聲明性dijit形式導致無效提交?

是不是dijit.form.FilteringSelect(從ValidationTextBox延伸)默認情況下應該有屬性required = false

爲什麼簡單地在下面的聲明式表單中包含FilteringSelect會自動導致dijit.form.Form.isValid() == false

即使手動將過濾選擇的required prop設置爲false,也會導致無效的表單提交。我覺得我在這裏錯過了一些東西。

我使用dojo工具包版本1.6.1。

<!-- form.html --> 

<form id="form" dojoType="dijit.form.Form"> 
    <table> 
    <tr> 
     <td id="friend"> 
     <select name="friend" id="friend-input" dojotype="dijit.form.FilteringSelect"></select> 
     </td> 
    </tr> 
    <tr> 
     <td> 
     <input type="submit" id="submit-input" value="Submit" label="Submit" dojotype="dijit.form.Button"> 
     </td> 
    </tr> 
    </table> 
</form> 


/* form.js */ 

dojo.require("dijit.form.Button"); 
dojo.require("dijit.form.FilteringSelect"); 
dojo.require("dijit.form.Form"); 

dojo.ready(function() { 
var form = dijit.byId("form"); 
var friendInput = dijit.byId("friend-input"); 
friendInput.required = false; 

dojo.connect(form, "onSubmit", function(event) { 
    event.preventDefault(); 
    if (form.isValid()) { 
     alert("Ready to submit data: " + dojo.toJson(form.get("value"))); 
    } else { 
     alert("Form is not valid."); 
    } 
}); 
}); 
+1

這是行不通的? 'friendInput.set(「required」,false);' – Frode

+0

似乎有效,是的。謝謝。我認爲我在理解方面的差距是相信get()和set()是對底層標籤的屬性進行操作的方法,並不是所有的widget的屬性。我現在看到[這個問題](http://stackoverflow.com/questions/5107722/set-value-of-dijit-form-textarea)得到同樣的東西。 – Nolsto

回答

0

就像弗洛德提到的那樣,我們需要設置爲false。 但是,可能會使用很多字段。在dojo.ready部分中爲每個設置'required'並不是一個好主意。

<select name="friend" id="friend-input" 
      dojotype="dijit.form.FilteringSelect" required="false"></select> 

更好的方法是在html本身中提及它作爲屬性。讓我舉個例子,爲什麼它更好。

如果該字段包含在選項卡中,並且該選項卡在某些操作上被刷新,則html將再次被禁用。所以,在這種情況下,對於該領域而言,所需的將再次成立。因此,爲了避免這些情況,在widget的html聲明中提供它。

相關問題