Javascript selected JS-将optgroup添加到所选项目

Javascript selected JS-将optgroup添加到所选项目,javascript,jquery,jquery-chosen,Javascript,Jquery,Jquery Chosen,我想找到在用户选择选项时将optgroup标签输入插入的搜索选择项的方法。格式为[option] 问题是,默认情况下,没有明确的方法来做到这一点。 关于如何实现这种行为有什么建议吗 先谢谢你 这是默认行为 这就是我想做的 您可以通过接收on()方法的第二个参数来实现这一点,该方法包含一个对象,该对象的属性已选定,如果存在值元素,则该对象包含该元素,或者文本元素(与当前情况类似): 然后,您可以获取最接近的optgroup,并连接两者,然后更新选项text: var selected_valu

我想找到在用户选择选项时将optgroup标签输入插入的搜索选择项的方法。格式为
[option]

问题是,默认情况下,没有明确的方法来做到这一点。 关于如何实现这种行为有什么建议吗

先谢谢你

这是默认行为

这就是我想做的

您可以通过接收
on()
方法的第二个参数来实现这一点,该方法包含一个对象,该对象的属性
已选定,如果存在
元素,则该对象包含该元素,或者
文本
元素(与当前情况类似):

然后,您可以获取最接近的
optgroup
,并连接两者,然后更新选项
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");
检查下面的例子,希望这有帮助


$(“.selected select”).selected();
$(.select)on('change',function(event,el){
var selected_元素=$(“.selected选择选项:包含(“+el.selected+”);
var selected_value=selected_element.val();
var parent_optgroup=选定的_元素。最近('optgroup')。attr('label');
所选元素。文本(父元素组+'-'+所选元素值)。触发器(“所选:已更新”);
});

达拉斯牛仔队
纽约巨人队
费城鹰
华盛顿红皮队
芝加哥熊
底特律狮子会
绿湾包装机
明尼苏达维京人
亚特兰大猎鹰队
卡罗莱纳黑豹
新奥尔良圣徒
坦帕湾海盗
亚利桑那红衣主教
圣路易斯公羊
旧金山49人队
西雅图海鹰
水牛比尔
迈阿密海豚
新英格兰爱国者
纽约喷气式飞机
巴尔的摩乌鸦
辛辛那提孟加拉
克利夫兰布朗
匹兹堡钢人队
休斯顿德州人队
印第安纳波利斯小马队
杰克逊维尔美洲虎队
田纳西泰坦
丹佛野马队
堪萨斯城酋长队
奥克兰突袭者队
圣地亚哥充电器

此代码适用于多个选择,并在取消选择时修复标签:

    $('select').chosen().filter('[multiple]').on('change', function(event, el) {
    var value = el.selected ? el.selected : el.deselected;
    var option = $(this).find("option[value=" + value + "]");
    var currentText = option.text();
    var newText;
    if (el.selected) {
      var optgroupLabel = option.closest('optgroup').attr('label');
      newText = optgroupLabel + ' - ' + currentText;
    } else {
      newText = currentText.split(' - ')[1];
    }
    option.text(newText).trigger("chosen:updated");
  });

要使用cakephp创建optgroup,您必须以这种方式创建数组。 即


我不知道为什么没有人建议这样做的正确方法。初始化插件时,只需将参数
include_group_label_in_selected
设置为
true
。你会得到


在所选选项中。

如果我猜对了您的需要,这应该会对您有所帮助……这并不是我想要做的,因为选择是一个所选的JS。
    $('select').chosen().filter('[multiple]').on('change', function(event, el) {
    var value = el.selected ? el.selected : el.deselected;
    var option = $(this).find("option[value=" + value + "]");
    var currentText = option.text();
    var newText;
    if (el.selected) {
      var optgroupLabel = option.closest('optgroup').attr('label');
      newText = optgroupLabel + ' - ' + currentText;
    } else {
      newText = currentText.split(' - ')[1];
    }
    option.text(newText).trigger("chosen:updated");
  });
$counties = array(
  'Country Name 1' => array(
    'county_1_id' => 'County 1 Name',
    'county_2_id' => 'County 2 Name',
    'county_3_id' => 'County 3 Name',
  ),
  'Country Name 2' => array(
    'county_4_id' => 'County 4 Name',
    'county_5_id' => 'County 5 Name',
    'county_6_id' => 'County 6 Name',
  ),
);

echo $this->Form->input('country', array('type' => 'select', 'options' => $counties));