选择后进行角度预先验证

时间:2015-01-19 21:09:25

标签: angularjs angular-ui-typeahead

我正在使用http://angular-ui.github.io/bootstrap/(版本0.12.0)中的angular(版本1.3.9)和angular-ui / typeahead。

在我的网络应用中,用户应该被迫选择预先输入/自动完成下拉菜单提供的其中一个选项,因此我设置了<input typeahead="..." typeahead-editable="false" .../>

问题是,当用户单击鼠标按钮并按住它时,验证已经启动,但模型尚未使用所选选项进行更新。当用户释放鼠标按钮时,将触发选择。 因此,在单击和释放鼠标按钮之间的时间范围内,元素的状态将变为无效,因此会显示相应的错误消息。

此时间范围通常小于一秒(取决于用户释放鼠标按钮的速度)。但如果错误出现在这么短的时间内,那么用户体验仍然非常糟糕。

我可以更改相应指令的执行顺序吗? 例如。应该在ng-blur之前调用ng-select?

您知道哪些选项可以解决问题?

您可以在http://co2offset.atmosfair.de/flight/offset上测试行为 只需键入机场,从下拉列表中选择一个选项并按住鼠标按钮。然后你会看到你不应该看到的红色错误信息。

1 个答案:

答案 0 :(得分:2)

我最近遇到了同样的问题。我最终禁用了提交按钮,直到选择了一个值。所以我的表格看起来像这样:

&#13;
&#13;
   <form name="searchForm" class="clearfix" ng-controller="searchFormController">
            <div class="form-group col-md-8 group-1">
                <label>Book</label>
                <input name="txtBookTitle"
                       type="text"
                       class="form-control"
                       ng-model="book"
                       placeholder="Enter book title"
                       typeahead-min-length="3"
                       typeahead-editable="false"
                       typeahead="book as book.Title for book in getBookTitles($viewValue)"
                       typeahead-input-formatter="book.Title"
                       typeahead-loading="loadingbooktitles"
                       required>
                <i ng-show="loadingbooktitles">
                    <img src="~/Content/images/ajax-loader.gif" />
                </i>
                <span ng-show="searchForm.txtBookTitle.$error.required">Booktitle is required</span>
            </div>
            <div class="form-group col-md-4 padding-top-25 text-right">
                <input type="submit" value="Submit" class="btn btn-primary" ng-click="formSubmit()" ng-disabled="searchForm.$invalid" />
            </div>
        </form>
&#13;
&#13;
&#13;

NG-禁用=&#34; searchForm $无效&#34;是关键。它似乎运行良好,足以阻止用户超越预先选择。另一个奖励(取决于您的观点)是用户无法提交表单,直到所有验证问题都得到修复。