【问题标题】:Is there a way to add a description to each option in a dropdown using select2?有没有办法使用 select2 为下拉列表中的每个选项添加描述?
【发布时间】:2017-03-31 20:11:04
【问题描述】:

我有一个 Django 项目,其中有一个这样的选择下拉列表:

但我想要这样的东西:

我的<select> 表单如下所示:(在开发人员工具中检查后)

<select class="form-control" data-parsley-required="true" id="id_org_role" name="org_role" required="">
    <option value="A">Administrator</option>
    <option value="M" selected="selected">Member</option>
</select>

如果不是select2,有没有其他jquery库可以帮我完成这个?

我已尝试遵循 Select2 的文档,并相信如果 this 方式(用于模板),我们可以在选项文本旁边跨越一个图像,然后,必须有一种方法来跨越每个选项下的“文本描述”。但我不知道这是如何实现的。到目前为止,我所做的只是:

var org_role = function(roles){
      if (!roles.id) {
      return roles.text;
    }
    return $(
    '<strong>' + roles.text + '</strong>' + '<br/>'
    '<span>' + "some description" + '</span>'
  );
};

$("#id_org_role").select2({
  templateResult: org_role,
});

但这不起作用。此外,即使是这样,它也会为所有选项显示相同的描述。但它必须明显不同。

我在模板中的 Django 表单如下所示:

<form method="POST" action="" class="org-member-edit" id='organization_permissions' data-parsley-validate>

{% csrf_token %}

<div class="form-group member-role{% if org_role_form.org_role.errors %} has-error{% endif %}">

    <label class="control-label" for="{{ org_role_form.org_role.id_for_label }}">{% trans "Role" %}</label>

{% render_field org_role_form.org_role class+="form-control" data-parsley-required="true" %}

    <div class="error-block">{{ org_role_form.org_role.errors }}</div>

  </div>

</form>

在上面的第 5 行,即模板标签中的render_field org_role_form.org_roleorg_role 采用以下形式的值: (注意:render_field 因为我使用的是 Django-tweaks-wideget)

class EditOrganizationMemberForm(SuperUserCheck, forms.Form):

org_role = forms.ChoiceField(choices=ADMIN_CHOICES)

它从另一个文件choices.py中获取选择字段,如下所示:

ADMIN_CHOICES = (
         ('A', _('Administrator')),
         ('M', _('Member'))
        )

我怎样才能做到这一点? (不同选项的不同描述)请帮忙。几个小时以来我一直被困在这个问题上。

【问题讨论】:

    标签: jquery jquery-select2 jquery-select2-4 jquery-select2-3


    【解决方案1】:

    将描述放在属性中怎么样?标题?

    $(function(){
      $("select").select2({
        templateResult: formatOption
      });
      
      function formatOption (option) {
        var $option = $(
          '<div><strong>' + option.text + '</strong></div><div>' + option.title + '</div>'
        );
        return $option;
      };
    });
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"
    integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
    crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.12/js/select2.full.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
    
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" />
    <link href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css" rel="stylesheet" />
    
    <select style="width:200px">
      <option value="optionA" title="Description for A">option A</option>
      <option value="optionB" title="Description for B">option B</option>
    </select>

    【讨论】:

    • 感谢您的解决方案。效果很好。虽然为了添加title属性,我使用jquery为每个相应的选项动态添加属性,但我从你的回答中得到了基本/初步的想法。非常感谢您的帮助。干杯! @noriMonsta
    • 美丽、简单、直接的答案。关于这个主题的许多帖子,而不是像你的很明确的答案。 A+
    • 很棒的答案+1。渲染模板后有什么方法可以删除标题属性?
    猜你喜欢
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多