当我使用dojo.xhrPost
发布表单时,除了dojox.CheckedMultiSelect的值之外,我获取表单中的所有字段,不管选择了哪些选项。
我的CheckedMultiSelect声明:
<div dojoType="dojo.data.ItemFileReadStore" jsId="processTypeList" url="json/processtypelist.json.php"></div>
<label for="processTypeSelect">Process Types</label>
<select dojoType="dojox.form.CheckedMultiSelect" name="processTypeSelect" id="processTypeSelect" multiple="true" style="height:166px;" store="processTypeList"></select>
这是我的xhrPost:
<button dojoType="dojox.form.BusyButton" id="logSearchSubmit" busyLabel="Searching..." timeout="5"
onclick="dojo.xhrPost({
url: 'handlers/logsearch.php',
form: dojo.byId('formSearch'),
handleAs: 'json'
});">Search</button>
这就是我发布的内容:
endDate 2009-12-15
postAction search
processSelect
searchAttribute none
searchAttributeValue
startDate 2009-12-15
为什么dojox控件值没有被发布的任何原因,尽管作为我的表单一部分的dijit控件的所有值都被发布了?控件正好在其他值的POST之间,所以我知道它在表单中。
我刚刚添加了另一个按钮来执行console.log(formSearch.getValues())
而不是xhrPost,我获得了登录到控制台的控件的值。显然dojo意识到了这一点,但当我做console.log(dojo.formToJson("formSearch"))
时,除了dojox控件之外,我得到了所有的表单数据。
答案 0 :(得分:3)
我猜测CheckedMultiSelect中的一个错误是它没有将'name'属性从声明的标记转移到将在表单提交中使用的隐藏选择小部件。由于某些IE行为,dijit.form小部件必须以相当笨拙的方式执行此操作,将${nameAttrSetting}
直接插入到select元素的模板(CheckedMultiSelect.html)中。有关示例,请参阅dijit / form / templates / Button.html。
CheckedMultiSelect继承自dijit,但需要在自己的模板中复制此修复程序,因为它无法继承。如果这是解决方案,请考虑向bugs.dojotoolkit.org提交报告和补丁。