如何强迫用户从自动完成列表中选择php和jquery

时间:2018-07-17 23:05:43

标签: javascript php jquery ajax

我有一个自动完成功能,可以正常工作,并且选择并显示了数据。自动完成值的数据包含在.js文件中。

我正在解决两个问题:

  1. 如何防止用户选择数据文件中未包含的值?例如,他们键入一个值,该值不在数据文件中……我不希望他们能够提交自己的数据。错误消息或错误占位符会很棒。

  2. 当用户键入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上搜索了类似的问题,但找不到解决方案。

1 个答案:

答案 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库可以“强制”输出,但是我没有建议,反正我会自己动手。