【问题标题】:Angular not validating form select角度不验证表单选择
【发布时间】:2017-06-02 02:18:09
【问题描述】:

我是 Angular 新手,所以请耐心等待。我有一个带有dropdowntextboxbutton 的表格。在表单生效之前,用户必须从下拉框中选择一个选项并在文本框中输入一个值。

<form name='personDataSourceForm' novalidate ng-submit='personDataSourceForm.$valid && PersonCtrl.SaveDataItem()'>
    <span>Invalid: {{personDataSourceForm.$invalid}}</span><br />
    <span>valid: {{personDataSourceForm.$valid}}</span>
    <div class="input-group">
        <div class="input-group-addon">
            <select class="form-control input-sm" required ng-model='PersonCtrl.sp.person.newItem.dataType' ng-options='opt as opt.text group by opt.dataType for opt in PersonCtrl.DataItemTypes'>
                <option value="" disabled selected>Choose...</option>
            </select>
        </div>
        <input type="text" class="form-control input-sm" ng-model='PersonCtrl.sp.person.newItem.value' required>
        <div class="input-group-btn">
            <button class="btn btn-default btn-sm" ng-class="{ 'btn-success' : PersonCtrl.sp.person.newItem.dataType.dataType && PersonCtrl.sp.person.newItem.value }" type="submit">Save</button>
            <button class="btn btn-link btn-sm" type="button" ng-click="PersonCtrl.StopAddItem()">Cancel</button></div>
    </div>
</form>

我快速添加了 2 个 span 来显示验证状态。当两者都为空时,表单会显示invalid,这是有道理的。

只要我在文本框中输入一个值,即使dropdown 仍未更改,表单也会突然有效。 为什么我的dropdown 没有得到验证?我什至试过这个解决方案AngularJS Dropdown required validation

【问题讨论】:

  • 无法重现您的问题。你能在小提琴中重现同样的问题并分享吗?
  • 编辑:当我将selected 更改为ng-selected="selected" 时,问题似乎得到了解决。仍在试图理解为什么..
  • ng-selected = "selected" 就像从您的选项中删除选择一样,因为如果变量selected 不在范围内,它将被解析为false
  • 谢谢。我仍在努力解决这个问题。因此,如果我想确保用户选择第一个默认选项以外的其他内容,那么我可以将 ng-selected 留在其中,如果未选择任何内容,它应该始终返回 false?
  • 只要您的选项有 value="",如果用户选择该选项,您的表单应该是无效的。所以最好像&lt;option value="" default&gt;Choose...&lt;/option&gt;一样使用它。

标签: angularjs html validation select


【解决方案1】:

我最初的想法是您已经选择了该默认值:

<option value="" selected>Choose...</option>

所以它在技术上确实具有“”的值,这满足了要求。

【讨论】:

  • 将我发布的代码更新为我测试过的代码,但这也不起作用
【解决方案2】:

我认为您需要查看PersonCtrl.sp.person.newItem。当dataTypevalue 都变为实心时,该表单变为有效。我的猜测是该项目始终具有其dataType 实体且有效,因此当输入新值时,整个表单将变为有效。

【讨论】:

    【解决方案3】:

    为什么您的select 广告input 没有name 属性? name 属性是表单验证正常工作所必需的。 我认为form 为每个输入组件创建了一个name-&gt;validity 的映射,可能是您省略了它,它们(selectinput)都映射到同一个有效性对象。如果是这种情况,那么任何人都变得有效,有效地使另一个人的状态也有效,因此它们都是有效的,表格变得有效。 请为它们添加单独的名称,看看问题是否已解决。我上面的观点是一个强烈的猜测,我没有深入研究 Angular 代码来检查 ng-form 的行为。

    【讨论】:

    • 我什至用 name 属性尝试过,但它不想工作,我想不通。最终工作的是使用ng-select
    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2021-02-13
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多