我有一个自动完成功能,可以正常工作,并且选择并显示了数据。自动完成值的数据包含在.js文件中。
我正在解决两个问题:
如何防止用户选择数据文件中未包含的值?例如,他们键入一个值,该值不在数据文件中……我不希望他们能够提交自己的数据。错误消息或错误占位符会很棒。
当用户键入value并且自动完成功能检测到相似的值并显示自动完成功能时,您只能通过按下键或单击鼠标来选择值。如何启用tab
选择值?
这是我的代码:
HTML:
<input type="text" name="country" id="autocomplete-ajax" style=" background: transparent;" required placeholder="Type country name and select from list"/>
数据文件:
var countries = {
"0": "South Africa",
"1": "Australia",
"2": "Brazil",
"3": "United States",
"4": "Zimbabwe"
}
自动完成功能:
/*jslint browser: true, white: true, plusplus: true */
/*global $, countries */
$(function () {
var countriesArray = $.map(countries, function (value, key) { return { value: value, data: key }; });
// Setup jQuery ajax mock:
$.mockjax({
url: '*',
responseTime: 2000,
response: function (settings) {
var query = settings.data.query,
queryLowerCase = query.toLowerCase(),
re = new RegExp('\\b' + $.Autocomplete.utils.escapeRegExChars(queryLowerCase), 'gi'),
suggestions = $.grep(countriesArray, function (country) {
// return country.value.toLowerCase().indexOf(queryLowerCase) === 0;
return re.test(country.value);
}),
response = {
query: query,
suggestions: suggestions
};
this.responseText = JSON.stringify(response);
}
});
// Initialize ajax autocomplete:
$('#autocomplete-ajax').autocomplete({
// serviceUrl: '/autosuggest/service/url',
lookup: countriesArray,
lookupFilter: function(suggestion, originalQuery, queryLowerCase) {
var re = new RegExp('\\b' + $.Autocomplete.utils.escapeRegExChars(queryLowerCase), 'gi');
return re.test(suggestion.value);
},
onHint: function (hint) {
$('#autocomplete-ajax-x').val(hint);
},
});
});
我在Stackoverflow上搜索了类似的问题,但找不到解决方案。
答案 0 :(得分:1)
根据期望的数组验证发布的字段。用伪代码
function check_post($posted_output) {
$valid_outputs_array = array("val1", "val2");
if (in_array($poste_output, $valid_outputs_array)) {
return true
} else {
return false
}
}
出于UX原因,应在Clientside / js中进行此操作,出于安全原因,应在Serverside / PHP中进行此操作。
还有一些js库可以“强制”输出,但是我没有建议,反正我会自己动手。