简体   繁体   中英

JQuery chosen plugin - Sending the user typed input to an Ajax call

I am trying to populate the drop down using Chosen plugin for multiple select.

I have added the fiddle

http://jsfiddle.net/san1234/ymnj12xk/

My intention is to populate the "options" tag in the "select" tag, basing on JSON data obtained by sending user typed letter via the Ajax call.

For this I need to know, how to make an ajax call onkeyup ie if the user typed "Am", i want to send that input to an Ajax call and get the JSON response, something like ["America","Amsterdam"]

I'm new to this and I cant figure out a way to extract the user typed input in the 'select' box to actually send it as request in an Ajax call.

I have tried doing this but 'autocomplete' method in the JS file doesn't work How do i do this? kindly help!

JS file

 $(".chosen-select").chosen(); $(".chosen-select-deselect").chosen({ allow_single_deselect: true }); $('.chosen-choices input').autocomplete({ source: function(request, response) { $.ajax({ url: "/someURL/" + request.term + "/", dataType: "json", beforeSend: function() { $('ul.chosen-results').empty(); }, success: function(data) { alert("Success!"); response($.map(data, function(item) { $('ul.chosen-results').append('<li class="active-result">' + item.name + '</li>'); })); } }); } }); 
 <link href="http://harvesthq.github.io/chosen/chosen.css" rel="stylesheet" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="http://harvesthq.github.io/chosen/chosen.jquery.js"></script> <select class="chosen chosen-select" multiple="" data-placeholder="Choose a Country" style="width:200px"> <option value="America">America</option> <option value="Amsterdam">Amsterdam</option> <option value="Australia">Australia</option> <option value="Dallas">Dallas</option> <option value="GHI">hij</option> </select> 

I dont know if you are using PHP in your back end or any other program language but here's my solution using php and javascript :

First your javaScript:

//initialization of chosen select
$(".chosen-select").chosen({
  search_contains: true // an option to search between words
});
$(".chosen-select-deselect").chosen({
  allow_single_deselect: true
});

//ajax function to search a new value to the dropdown list
function _ajaxSearch (param){
  return $.ajax({
    url: "request.php",
    type: "POST",
    dataType: "json",
    data: {param:param}
  })
}
//key event to call our ajax call
$(".chosen-choices input").on('keyup',function(){
  var  param = $('.chosen-choices input').val();// get the pressed key
  _ajaxSearch(param)
  .done(function(response){
    var exists; // variable that returns a true if the value already exists in our dropdown list
    $.each(response,function(index, el) { //loop to check if the value exists inside the list
      $('#mySelect option').each(function(){
        if (this.value == el.key) {
          exists = true;
        }
      });
      if (!exists) {// if the value does not exists, added it to the list
        $("#mySelect").append("<option value="+el.key+">"+el.value+"</option>");
        var ChosenInputValue = $('.chosen-choices input').val();//get the current value of the search
        $("#mySelect").trigger("chosen:updated");//update the list
        $('.chosen-choices input').val(ChosenInputValue);//since the update method reset the input fill the input with the value already typed
      }
    });
  })
})

your php file:

if (isset($_POST["param"])) {// check is the param is set
$param = $_POST["param"]; // get the value of the param
$array  = array('JKL' => 'jkl' , 'MNO'=>'mno', 'PQR'=>'pqr','STU'=>'stu','VWX'=>'vwx','YZ'=>'yz' );//array of values
$matches = array();//array of matches
    foreach($array as $key=>$value){//loop to check the values
        //check for match.
        if(strpos($value, $param) !== false){
            //add to matches array.
            $matches[]= array ("key"=> $key,"value"=>$value);
        }
    }
//send the response using json format
echo json_encode($matches);
}

Hope it helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM