0

似乎无法弄清楚这里有什么问题。这在使用 3.5 时效果很好,但不适用于 4.0。

我也在使用 select2.full.js,它支持以这种方式使用输入。

html:

<input id="vcreate-filter" type="text" name="settings[filter]" class="form-control" style="width:100%;"/>

js:

$("#vcreate-filter").select2({
    placeholder: "Select or enter application...",
    allowClear: true,
    multiple: false,
    ajax: {
        dataType: 'json',
        delay: 1000,
        type: 'post',
        url: '/process/get_application_list.php',
        data: function (term, page) {
            return {
                term: term, // search term
                page_limit: 25, // page size
                page: page // page number
            };
        },
        results: function (data, page) {
            var more = (page * 25) < data.total; // whether or not there are more results available
            return {
                results: data.results,
                more: more
            };
        }
    },
    createSearchChoice:function(term, data) {
        if ($(data).filter(function() {
            return this.text.localeCompare(term)===0; }).length===0) {
                return {id:term, text:term};
            }
        }
}).on('change', function() {
    $(this).valid();
});

get_application_list.php:

.......
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

// make sure there are some results else a null query will be returned
if( count($results) > 0 )
{
    foreach( $results as $row )
    {
        $ajax_result['results'][] = array(
            'id' => htmlspecialchars($row['event_target'], ENT_QUOTES, 'UTF-8'),
            'text' => htmlspecialchars($row['event_target'], ENT_QUOTES, 'UTF-8')
        );
    }
} 
else 
{
    // 0 results send a message back to say so.
    $ajax_result['results'][] = array(
        'id' => 0,
        'text' => 'No results found...'
    );
}

// return result array to ajax
echo json_encode($ajax_result);
4

1 回答 1

0

html:使用选择元素而不是输入。

<select id="vcreate-filter" type="text" name="settings[filter]" class="form-control" style="width:100%;"> </select>`

js:使用processResults而不是 ' results' 作为回调属性。

    processResults: function (data, page) {
        var more = (page * 25) < data.total; // whether or not there are more results available
        return {
            results: data.results,
            more: more
        };
}

假设 json 格式正确[{"id": "1", "text": "One"}, {"id": "2", "text": "Two"}]

此处似乎记录了重大更改。

于 2016-03-08T21:41:22.643 回答