I want to find the way to enter the optgroup label into the inserted search-choice item, when the user select a option. With the format [optgroup]-[option].
The problem is that by default there is no a clear way to do it. Any suggestions on how to achieve this behavior?
Thank you in advance.
This is the default behavior
This is what I am trying to do
Advertisement
Answer
You can achieve that by receiving a second parameter of on() method that contains an object with an attribute selected contains a value element if it exists or the text element (like the current case) :
$(".chosen-select").on('change', function (event,el) {
Then you can get the closest optgroup and concatenate the both then update the option text :
var selected_value = selected_element.val();
var parent_optgroup = selected_element.closest('optgroup').attr('label');
selected_element.text(parent_optgroup+' - '+selected_value).trigger("chosen:updated");
Check example below, Hope this helps.
$(".chosen-select").chosen();
$(".chosen-select").on('change', function (event,el) {
var selected_element = $(".chosen-select option:contains("+el.selected+")");
var selected_value = selected_element.val();
var parent_optgroup = selected_element.closest('optgroup').attr('label');
selected_element.text(parent_optgroup+' - '+selected_value).trigger("chosen:updated");
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://harvesthq.github.io/chosen/chosen.css" rel="stylesheet"/>
<script src="http://harvesthq.github.io/chosen/chosen.jquery.js"></script>
<select multiple data-placeholder="example" style="width:350px;" class="chosen-select" tabindex="5">
<option value=""></option>
<optgroup label="NFC EAST">
<option>Dallas Cowboys</option>
<option>New York Giants</option>
<option>Philadelphia Eagles</option>
<option>Washington Redskins</option>
</optgroup>
<optgroup label="NFC NORTH">
<option>Chicago Bears</option>
<option>Detroit Lions</option>
<option>Green Bay Packers</option>
<option>Minnesota Vikings</option>
</optgroup>
<optgroup label="NFC SOUTH">
<option>Atlanta Falcons</option>
<option>Carolina Panthers</option>
<option>New Orleans Saints</option>
<option>Tampa Bay Buccaneers</option>
</optgroup>
<optgroup label="NFC WEST">
<option>Arizona Cardinals</option>
<option>St. Louis Rams</option>
<option>San Francisco 49ers</option>
<option>Seattle Seahawks</option>
</optgroup>
<optgroup label="AFC EAST">
<option>Buffalo Bills</option>
<option>Miami Dolphins</option>
<option>New England Patriots</option>
<option>New York Jets</option>
</optgroup>
<optgroup label="AFC NORTH">
<option>Baltimore Ravens</option>
<option>Cincinnati Bengals</option>
<option>Cleveland Browns</option>
<option>Pittsburgh Steelers</option>
</optgroup>
<optgroup label="AFC SOUTH">
<option>Houston Texans</option>
<option>Indianapolis Colts</option>
<option>Jacksonville Jaguars</option>
<option>Tennessee Titans</option>
</optgroup>
<optgroup label="AFC WEST">
<option>Denver Broncos</option>
<option>Kansas City Chiefs</option>
<option>Oakland Raiders</option>
<option>San Diego Chargers</option>
</optgroup>
</select>
