dojox.CheckedMultiSelect的值未使用dojo.xhrPost发布

时间:2009-12-15 15:14:40

标签: dojo dijit.form

当我使用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控件之外,我得到了所有的表单数据。

1 个答案:

答案 0 :(得分:3)

我猜测CheckedMultiSelect中的一个错误是它没有将'name'属性从声明的标记转移到将在表单提交中使用的隐藏选择小部件。由于某些IE行为,dijit.form小部件必须以相当笨拙的方式执行此操作,将${nameAttrSetting}直接插入到select元素的模板(CheckedMultiSelect.html)中。有关示例,请参阅dijit / form / templates / Button.html。

CheckedMultiSelect继承自dijit,但需要在自己的模板中复制此修复程序,因为它无法继承。如果这是解决方案,请考虑向bugs.dojotoolkit.org提交报告和补丁。