Jquery Chosen plugin - dynamically populate list by Ajax

后端 未结 12 1031
野性不改
野性不改 2020-12-04 11:14

Im trying to build my dropdown menu using the plugin Chosen for Multiple Select . Here\'s to behavior I\'m based on:

http://jsfiddle.net/JfLvA/

12条回答
  •  遥遥无期
    2020-12-04 11:54

    Chosen API has changed a lot.

    If non of the solution given works for you, you can try this one: https://github.com/goFrendiAsgard/gofrendi.chosen.ajaxify

    Here is the function:

    // USAGE:
    // $('#some_input_id').chosen();
    // chosen_ajaxify('some_input_id', 'http://some_url.com/contain/');
    
    // REQUEST WILL BE SENT TO THIS URL: http://some_url.com/contain/some_term
    
    // AND THE EXPECTED RESULT (WHICH IS GOING TO BE POPULATED IN CHOSEN) IS IN JSON FORMAT
    // CONTAINING AN ARRAY WHICH EACH ELEMENT HAS "value" AND "caption" KEY. EX:
    // [{"value":"1", "caption":"Go Frendi Gunawan"}, {"value":"2", "caption":"Kira Yamato"}]
    
    function chosen_ajaxify(id, ajax_url){
        console.log($('.chosen-search input').autocomplete);
        $('div#' + id + '_chosen .chosen-search input').keyup(function(){
            var keyword = $(this).val();
            var keyword_pattern = new RegExp(keyword, 'gi');
            $('div#' + id + '_chosen ul.chosen-results').empty();
            $("#"+id).empty();
            $.ajax({
                url: ajax_url + keyword,
                dataType: "json",
                success: function(response){
                    // map, just as in functional programming :). Other way to say "foreach"
                    $.map(response, function(item){
                        $('#'+id).append('');
                    });
                    $("#"+id).trigger("chosen:updated");
                    $('div#' + id + '_chosen').removeClass('chosen-container-single-nosearch');
                    $('div#' + id + '_chosen .chosen-search input').val(keyword);
                    $('div#' + id + '_chosen .chosen-search input').removeAttr('readonly');
                    $('div#' + id + '_chosen .chosen-search input').focus();
                    // put that underscores
                    $('div#' + id + '_chosen .active-result').each(function(){
                        var html = $(this).html();
                        $(this).html(html.replace(keyword_pattern, function(matched){
                            return '' + matched + '';
                        }));
                    });
                }
            });
        });
    }
    

    Here is your HTML:

    
    

    And here is your javasscript:

    // This is also how you usually use chosen
    $('#ajax_select').chosen({allow_single_deselect:true, width:"200px", search_contains: true});
    // And this one is how you add AJAX capability
    chosen_ajaxify('ajax_select', 'server.php?keyword=');
    

    For more information, please refer to https://github.com/goFrendiAsgard/gofrendi.chosen.ajaxify#how-to-use

提交回复
热议问题