一个名为=''的无效表单控件不能集中在表格中

时间:2018-01-16 21:05:09

标签: angularjs

我在Stackoverflow上尝试了很多答案,但没有一个能正常工作:

<form ng-submit="runIt(cars)">
    <input type="radio" ng-model="cars.erp" value="Toyota" ng-required="!cars.erp">Toyota
    <br>
    <input type="radio" ng-model="cars.erp" value="Nissan" ng-required="!cars.erp">Nissan
    <br>
    <input type="radio" ng-model="cars.erp" value="Honda" ng-required="!cars.erp">Honda
    <br>
    <input type="radio" ng-model="cars.erp" value="Other" ng-required="!cars.erp">Other
    <input type="text" ng-model="cars.other" ng-show="cars.erp=='Other'" ng-required="!cars.other">
    <br>
    <input type="submit">
</form>

只有在Other中键入值后,才会开始工作。显然,这是由于隐藏的输入,但这是它应该如何工作:

  • 必须提交值
  • 如果选择了其他,则必须键入值。

这里是小提琴:http://jsfiddle.net/ADukg/17426/

重现:

  • 运行
  • 选择丰田
  • 点击提交
  • 请参阅“检查中的控制台”

2 个答案:

答案 0 :(得分:1)

您的文字字段ng-modelcars.other,然后您正在检查ng-required="!cars.other"哪个不对。你需要自己的文本字段。相反,它应该取决于单选按钮的值。类似于ng-required="cars.erp=='Other'"

我在这里更新了JSFiddle - &gt; http://jsfiddle.net/d0o29hb2/3/。希望这可以帮助。

答案 1 :(得分:1)

您获得“具有name ='的无效表单控件不可聚焦”的特定错误的原因是因为浏览器希望关注所需的表单元素(文本输入),但元素不可见。

<input type="text" ng-model="cars.other" ng-show="cars.erp=='Other'" ng-required="!cars.other"> 你说只有在cars.other评估为false时才需要文本字段。换句话说,无论何时填写文本字段都是必需的。如果cars.erp设置为other,则实际需要的是文本字段。

<input type="text" ng-model="cars.other" ng-show="cars.erp=='Other'" ng-required="cars.erp=='Other'">