Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jquery-nice-select plugin not working properly

I am using Jquery-nice-select plugin.(http://hernansartorio.com/jquery-nice-select/).

I have two select dropdowns. In the first one, I am displaying the country name form database and In second dropdown I am displaying the state name depending upon the country name.

I am able to display the both but the issue is, When I am selecting the country name then state name is displaying but that are not displaying inside select drop down. even I am not able to select it. Please check the below image. Would you help me out in this?

Before

enter image description here

After selecting the country name

enter image description here

<?php 
include('connection.php');
$country_list="SELECT id,name FROM countries";
/* create a prepared statement */
if ($stmt = $conn->prepare($country_list)) {
    /* execute statement */
    $stmt->execute();
    /* bind result variables */
    $stmt->bind_result($id, $country_name);
    }
 ?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
      <link rel="stylesheet" href="css/nice-select.css">
</head>
<body>
    <!--country name-->
     <select  name="country_data" class="myselect form-control country_data">
                        <option  value="" disabled selected>Select your country</option>
                            <?php  
                             while ($stmt->fetch()) {?>
                            <option value="<?php echo $id;?>"><?php echo $country_name;?></option>
                            <?php }?>
                     </select>

    <!--state name-->
                <select  name="state"  class="myselect form-control state_get">
                <option value=''>Select state</option>
                </select>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="js/jquery.nice-select.js"></script>

<script type="text/javascript">
      $(document).ready(function() {
  $('select').niceSelect();
});

$(document).ready(function() {
 $(".country_data").on('change',function(){
var country_id=$(this).val();
$.ajax({
    url:"process.php?key=state_retrive",
    method:"POST",
    data:'id='+country_id,
    success:function(data){
     $('.state_get').html(data);
     //alert(data);
    }
   });
    });
    });
</script>
</body>
</html>

Process.php

<?php 
ob_start();
session_start();
include('connection.php');

switch($_GET['key']) {
case 'state_retrive':state_retrive($conn);break;
default : redirect('index.php');
}

function state_retrive($conn)
{

if (isset($_POST['id'])) {

  $country_id=$conn->real_escape_string(trim($_POST['id']));
  $state_data="SELECT name,id FROM `states` WHERE country_id=?";
  //echo $state_data;
if ($stmt = $conn->prepare($state_data)) {
/* bind parameters for markers */
    $stmt->bind_param("s", $country_id);
    /* execute query */
    $stmt->execute();
    /* bind result variables */
    $stmt->bind_result($state_name, $id);
    /* fetch value */
    echo $states="<option value=''>Select state</option>";
    while ($stmt->fetch()) {
      $states="<option value=".$id.">".$state_name."</option>";
      echo $states;
      }

    /* close statement */
    $stmt->close();
}
 $conn->close();
}
}
 ?>

enter image description here

like image 543
Naren Verma Avatar asked Dec 24 '22 12:12

Naren Verma


1 Answers

The plugin works this way: It takes the select element and manipulate the DOM by hiding the select element and adding a styled DIV element that has a better UI but still behaves as a SELECT element.

The first time you call the plugin, it has its effect but after updating the state's element - you need to tell the plugin that there's new data.

So, first, we would like to update the SELECT element of the states. Afterwards we want the tell the plugin that we've updated that select element so it would update the DIV.

success:function(data){
     $('select.state_get').html(data); //Make sure you update the SELECT element. not the DIV (by adding "select.xxx").
     $('select.state_get').niceSelect('update'); //Tell the plugin to recreate the DIV.
     //alert(data);
    }
like image 153
Ofir Baruch Avatar answered Dec 28 '22 08:12

Ofir Baruch