为什么FilteringSelect采用声明式dijit形式导致无效提交?

时间:2011-08-01 21:46:43

标签: forms dojo dijit.form

帮助我理解这一点。

默认情况下dijit.form.FilteringSelect(从ValidationTextBox扩展而来)应该拥有属性required = false

为什么简单地以下面的声明形式包含FilteringSelect会自动生成dijit.form.Form.isValid() == false

即使手动将filteringselect的required道具设置为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 个答案:

答案 0 :(得分:0)

像Frode提到的那样,我们需要将required设置为false。 但是,可能会使用很多字段。在dojo.ready部分为每个设置'required'不是一个好主意。

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

更好的方法是在html本身中将其作为属性提及。让我举一个例子,为什么它会更好。

如果该字段包含在选项卡中,并且如果在某些操作上刷新选项卡,则html将再次被激活。因此,在该场景中,对于该字段,所需的将再次成立。因此,在小部件本身的html声明中提供它以避免这些情况。