选择2,将标签显示到另一个DIV中
我想将select2表单中的标签显示到另一个DIV中。 我尝试了TJ Nicolaides提出的解决方案https://stackoverflow.com/a/34140018/3030970但是当你删除一个标签然后再添加它时,它不能用于jQuery> 3,你不能再删除它
$(".js-example-tags").select2({ tags: true }).on('change', function() { var $selected = $(this).find('option:selected'); var $container = $(this).siblings('.js-example-tags-container'); var $list = $(''); $selected.each(function(k, v) { var $li = $('- ×' + $(v).text() + '
'); $li.children('a.destroy-tag-selected') .off('click.select2-copy') .on('click.select2-copy', function(e) { var $opt = $(this).data('select2-opt'); $opt.attr('selected', false); $opt.parents('select').trigger('change'); }).data('select2-opt', $(v)); $list.append($li); }); $container.html('').append($list); }).trigger('change');
TJ Nicolaides提出的小提琴: http : //jsfiddle.net/tjnicolaides/ybneqdqa/
问题与data()方法有关吗?
谢谢你的帮助:)
我终于找到了一个解决方案,它与data()
方法无关,而是与用于将所选值设置为false的attr()
方法相关。
我只需用prop()
方法替换attr()
,更适合这种情况。
$(".js-example-tags").select2({ tags: true }).on('change', function() { var $selected = $(this).find('option:selected'); var $container = $(this).siblings('.js-example-tags-container'); var $list = $(''); $selected.each(function(k, v) { var $li = $('- ×' + $(v).text() + '
'); $li.children('a.destroy-tag-selected') .off('click.select2-copy') .on('click.select2-copy', function(e) { var $opt = $(this).data('select2-opt'); $opt.prop('selected', false); // <-- Main difference $opt.parents('select').trigger('change'); }).data('select2-opt', $(v)); $list.append($li); }); $container.html('').append($list); }).trigger('change');