AngularJS:输入字段为空时禁用按钮

Posted

技术标签:

【中文标题】AngularJS:输入字段为空时禁用按钮【英文标题】:AngularJS: disable button when input fields are empty 【发布时间】:2016-10-26 04:37:21 【问题描述】:

我有一个下拉菜单、两个输入文本框和一个提交按钮。我希望禁用提交按钮,直到选择下拉项并且两个输入框都被填充。我查看了几个示例,包括this one 和this one,但这些都不适合我。下面是我的代码。谢谢

<form name="myForm">
  Select an option:
  <select id="dropDown" name="dropDown" ng-model="data.dropDown" >
    ** content for dropDown menu, populating it by using Django
  </select>
  From Date:
  <input type="text" id="dateFrom" ng-model="data.date1" />
  To Date:
  <input type="text" id="dateTo" ng-model="data.date2"   />

  <button id="submit" ng-click="submitRequest()" ng-disabled="!(!!data.dropDown && !!data.date1  && !!data.date2)">Submit </button>
</form>

下面这个方法我也试过了:

<form name="myForm">
  Select an option:
  <select id="dropDown" name="dropDown" ng-model="data.dropDown" >
    ** content for dropDown menu, populating it by using Django
  </select>
  From Date:
  <input type="text" id="dateFrom" ng-model="data.date1" required/>
  To Date:
  <input type="text" id="dateTo" ng-model="data.date2" required />
  <button id="submit" ng-click="submitRequest()" ng-disabled="myForm.$invalid">Submit </button>
</form>

所以最初当页面加载并且所有字段默认为空时,Submit 按钮被禁用,问题是在所有三个字段都填充后,它没有被启用。谢谢

【问题讨论】:

你在按钮上试过了吗:ng-disabled="data.dropDown.length &lt; 1 || data.date1.length &lt; 1 || data.date2.length &lt; 1"?它应该可以工作,因为您的模型是字符串。之后您还应该在submitRequest() 中进行数据验证。 我试过了,但即使在我填写了字段后,该按钮仍然处于禁用状态。会不会是下拉的原因? 这是一个可行的小提琴:jsfiddle.net/U3pVM/25802 另外,如果可以的话,请向我们提供控制器代码。您是否正确声明了范围变量? 感谢您的提琴,我知道是什么导致了问题。所以对于那些dateFromdateTo 文本框字段,我使用jQuery 的datepicker UI 创建一个弹出日历供用户选择日期。当用户选择一个日期时,ng-model 的值没有更新。我该如何解决? 我不确定你是否可以这样绑定。 Google for JQuery Angular中的日期组件,应该可以找到解决办法。 【参考方案1】:

如果我将required 添加到下拉元素中,您的第二种方法对我有用(使用 myForm.$invalid)。我创建了一个 plunkr,你可以用 here 玩。

<form name="myForm">
  Select an option:
  <select id="dropDown" name="dropDown" ng-model="data.dropDown" required>
    <option>red</option>
    <option>blue</option>
    <option>green</option>
  </select><br/>
  From Date:
  <input type="text" id="dateFrom" ng-model="data.date1" required/><br/>
  To Date:
  <input type="text" id="dateTo" ng-model="data.date2" required /><br/>
  <button id="submit" ng-click="submitRequest()" ng-disabled="myForm.$invalid">Submit</button>
</form>

注意:我在 plunkr 中使用了 Angular 1.4,因为您没有指定您正在使用的 Angular 版本。

编辑:OP 声明问题是使用 JQuery 的日期选择器创建的。我可以建议使用 angular-ui boostrap 日期选择器吗? Plunker example - Angular-UI Bootstrap docs

【讨论】:

【参考方案2】:

为什么不使用ng-disabled="myForm.myName.$pristine",因为 pristine 会检查文本框中插入的每个变量

请在此处查看小示例.. ng pristine example

【讨论】:

我试过了,按钮甚至没有被禁用。您知道我可以尝试的任何其他解决方案吗?

以上是关于AngularJS:输入字段为空时禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章

文本字段为空时禁用按钮

输入为空时如何禁用按钮?

当文本字段为空时禁用警报按钮 Swift 3

当 1 个或多个 TextBox 字段为空时禁用按钮

当textfield为空时禁用按钮等待其他文本字段中的任何更改

如何在对话框中将事件侦听器绑定到JavaFX TextFields。当字段为空时,“确定”按钮将被禁用,反之亦然