我有一个带有远程数据源的文本框,用于自动完成(jquery)[不是插件,jquery ui demos中显示的原始插件] 如何确保用户只输入自动填充建议中的内容而不是他自己的内容?
答案 0 :(得分:13)
问题是缺乏具体细节,但我认为你的意思是在客户端进行验证,因为你明确提到了auto complete插件。这个答案将分为两部分。第一个是原始答案,假设一个自动完成插件。第二个是根据问题的更新进行修订。
1)使用http://docs.jquery.com/Plugins/Autocomplete
最佳解决方案是“mustMatch”选项。这是API documentation。
如果设置为true,则自动完成程序将仅允许后端显示的结果。请注意,非法值会导致输入框为空。
您应该能够以这种方式使用它:
$("selector").autocomplete("url", {"mustMatch": true});
您还可以在“result”事件中以某种方式验证用户输入。这是一个链接:http://docs.jquery.com/Plugins/Autocomplete/result。
2)使用http://jqueryui.com/demos/autocomplete
此处没有mustMatch选项。您可以扩展插件,或者您可以添加类似于我为其他自动完成插件提到的内容。使用“change”活动。
$( ".selector" ).autocomplete({
change: function(event, ui) { ... }
});
如果您使用数组作为数据源,这将更有效。由于您使用的是远程数据源,因此需要使用ui.item进行另一个最终查询以验证用户值。然后,您可以允许或拒绝默认行为。
在任何一种情况下,仍应在服务器端以某种方式验证输入。这超出了jQuery插件的范围。