【发布时间】:2014-03-26 18:09:57
【问题描述】:
我有一个非常简单的表单,其中包含所有状态 + 缩写的选择。在某些情况下,使用键盘导航第二个按键不会更改 ng-model 值。例如,如果您选择选择元素并点击 T,它将正确选择田纳西州,TN 将被放入 ng-model。再次点击向下箭头或 T 会将显示的值更新为 Texas,但 ng-model 仍设置为 TN。奇怪的是,如果它有 2 个不同的字母,则不会发生这种情况,因此 T 后跟 A 正确地将 AL 放入 ng-model。
HTML 如下所示:
<div>
<label for="user_city">City</label>
<input type="text" name="user_city" id="user_city" ng-model="user.city" />
<label for="user_state">State*</label>
<select name="user_state" id="user_state" ng-model="user.state" style="width: 228px" required>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="CA">California</option>
<option value="CO">Colorado</option>
<option value="CT">Connecticut</option>
<option value="DE">Delaware</option>
<option value="DC">District Of Columbia</option>
<option value="FL">Florida</option>
<option value="GA">Georgia</option>
<option value="HI">Hawaii</option>
<option value="ID">Idaho</option>
<option value="IL">Illinois</option>
<option value="IN">Indiana</option>
<option value="IA">Iowa</option>
<option value="KS">Kansas</option>
<option value="KY">Kentucky</option>
<option value="LA">Louisiana</option>
<option value="ME">Maine</option>
<option value="MD">Maryland</option>
<option value="MA">Massachusetts</option>
<option value="MI">Michigan</option>
<option value="MN">Minnesota</option>
<option value="MS">Mississippi</option>
<option value="MO">Missouri</option>
<option value="MT">Montana</option>
<option value="NE">Nebraska</option>
<option value="NV">Nevada</option>
<option value="NH">New Hampshire</option>
<option value="NJ">New Jersey</option>
<option value="NM">New Mexico</option>
<option value="NY">New York</option>
<option value="NC">North Carolina</option>
<option value="ND">North Dakota</option>
<option value="OH">Ohio</option>
<option value="OK">Oklahoma</option>
<option value="OR">Oregon</option>
<option value="PA">Pennsylvania</option>
<option value="RI">Rhode Island</option>
<option value="SC">South Carolina</option>
<option value="SD">South Dakota</option>
<option value="TN">Tennessee</option>
<option value="TX">Texas</option>
<option value="UT">Utah</option>
<option value="VT">Vermont</option>
<option value="VA">Virginia</option>
<option value="WA">Washington</option>
<option value="WV">West Virginia</option>
<option value="WI">Wisconsin</option>
<option value="WY">Wyoming</option>
</select>
</div>
这是一个演示问题的 jsfiddle:http://jsfiddle.net/cKF6Q/2/
要复制,请单击城市框,然后按 TAB 使选择框聚焦并键入 T T。您将看到 user.state 在第一次按 T 时转到 TN,但第二个被忽略。
注意:这只是第二次按键,因此您必须在测试之间重新加载页面。
【问题讨论】:
-
我找到了解决此问题的方法。在控制器内部设置
$scope.user = { state: 'AL' };解决了这个问题。不过仍然对这个问题的解决方案非常感兴趣。 -
请将其报告为错误。
-
这是 angularjs 的一个报错,但是我的 googlefu 失败了,我再也找不到了。
-
从我记得的关于 bug 的记录来看,如果你创建一个没有空白值的选择并且 ng-model 值为 '' 或 null,那么 angular 会在列表顶部创建一个空白选项所以它不会用错误的值更新 ng-model。 Then when a value is selected it removes the blank option at the top (so you can't go back to an invalid value).这会导致第二次按下同一键时出现问题,因为它只会增加所选索引。按下不同的键重新发出搜索并修复选定的索引。
标签: angularjs