2

当我使用 发布表单时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

尽管作为我的表单一部分的 dijit 控件的所有值都已发布,但为什么不发布 dojox 控件值的任何原因?该控件位于其他值被发布的控件之间,所以我知道它在表单中。

我刚刚添加了另一个按钮来执行console.log(formSearch.getValues())而不是 xhrPost,并且我将控件的值记录到控制台中。所以很明显dojo意识到了这一点,但是当我这样做时,我console.log(dojo.formToJson("formSearch"))再次获得了除dojox控件之外的所有表单数据。

4

1 回答 1

3

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

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

于 2009-12-21T15:25:22.327 回答