select2 multi select 框仅将最后一个 selected 值放入数组
select2 multi select box only takes in the last selected value into the array
我最近尝试在我的 django
应用程序中使用 select2
多 select 框, select2
框显示正确,我可以 select 多个选项就像它应该的那样,但是当 selected 值进入数组时,就会出现问题,
这是我的代码:
html 页数:
<head>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/css/select2.min.css" rel="stylesheet" />
<script src="{% static 'js/vendor/jquery-3.4.1.min.js' %}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.min.js"></script>
<script>
$(document).ready(function() {
$('.recipientMultiSelect').select2({
placeholder: "Choose Recipient Numbers / Groups",
tags: true
});
});
</script>
</head>
<body>
<form action="{% url 'broadcast_single' %}" method="POST">
{% csrf_token %}
<div class="col-md-4">
<div class="form-group">
<label for="broadcast_name" class="col-form-label"> Broadcast Name: </label>
<input type="text" name="broadcast_name" class="form-control" required>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="recipients[]" class="col-form-label"> Recipient List: </label>
<select class="recipientMultiSelect form-control" name="recipients[]" multiple="multiple" required>
<option value="aaaaaa">aaaaaa</option>
<option value="bbbbbb">bbbbbb</option>
<option value="cccccc">cccccc</option>
</select>
</div>
</div>
</br>
</br>
</br>
</br>
<div class="col-xs-8 col-md-8">
<div class="form-group">
<label for="broadcast-content" class="col-form-label"> SMS Content: </label>
<textarea name="broadcast_content" rows="15" cols="85" maxlength="160" class="form-control"> </textarea>
</div>
</div>
<div class="col-xs-8 col-md-8">
<div class="form-group">
<button class="btn btn-primary btn-block mt-4" type="submit">Send Broadcast</button>
</div>
</div>
</form>
</body>
让我们假设所有 3 个选项都被 selected 并传递到数组 recipients[]
views.py:
def broadcastSingle(request):
if request.method == 'POST':
bcName = request.POST['broadcast_name']
bcRecArray = request.POST['recipients[]']
bcContent = request.POST['broadcast_content']
print('PRINT : ',len(bcRecArray))
print(', '.join(bcRecArray))
bcRecArray 应该包含 ['aaaaaa', 'bbbbbb', 'cccccc'] 并且长度应该是 3
但是,bcRecArray 具有 ['c'、'c'、'c'、'c'、'c'、'c'] 和长度6
我认为,select2
multi-select 框只取最后一个 selected 值并将其转换为 selected 中的字母数组值。
我在使用 bootstrapDualListbox 时遇到了同样的问题。我想出的解决方案是使用隐藏文本字段,然后在提交时,将 multi-select 中的值复制到隐藏文本字段中:
// "employees" is a jQuery handle to the multi-select.
let data = employees.val();
if (data.length === 0) {
submitError('<p>{{ _('No employees selected') }}</p>', event);
} else {
//
// We want ints, not strings.
//
data = data.map(x => parseInt(x));
snapshot.val(JSON.stringify({"employees": data}));
}
返回服务器,当然 JSON 必须根据需要从隐藏文本字段中解压缩。
我已经从这个帖子中找到了答案:
Django: using <select multiple> and POST
我应该改用 request.POST.getlist('recipients'),
因为 [] 在 django 中不起作用,因为它只是一个仅限于 PHP.
的约定
谢谢,我会关闭此线程。
我最近尝试在我的 django
应用程序中使用 select2
多 select 框, select2
框显示正确,我可以 select 多个选项就像它应该的那样,但是当 selected 值进入数组时,就会出现问题,
这是我的代码:
html 页数:
<head>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/css/select2.min.css" rel="stylesheet" />
<script src="{% static 'js/vendor/jquery-3.4.1.min.js' %}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.min.js"></script>
<script>
$(document).ready(function() {
$('.recipientMultiSelect').select2({
placeholder: "Choose Recipient Numbers / Groups",
tags: true
});
});
</script>
</head>
<body>
<form action="{% url 'broadcast_single' %}" method="POST">
{% csrf_token %}
<div class="col-md-4">
<div class="form-group">
<label for="broadcast_name" class="col-form-label"> Broadcast Name: </label>
<input type="text" name="broadcast_name" class="form-control" required>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="recipients[]" class="col-form-label"> Recipient List: </label>
<select class="recipientMultiSelect form-control" name="recipients[]" multiple="multiple" required>
<option value="aaaaaa">aaaaaa</option>
<option value="bbbbbb">bbbbbb</option>
<option value="cccccc">cccccc</option>
</select>
</div>
</div>
</br>
</br>
</br>
</br>
<div class="col-xs-8 col-md-8">
<div class="form-group">
<label for="broadcast-content" class="col-form-label"> SMS Content: </label>
<textarea name="broadcast_content" rows="15" cols="85" maxlength="160" class="form-control"> </textarea>
</div>
</div>
<div class="col-xs-8 col-md-8">
<div class="form-group">
<button class="btn btn-primary btn-block mt-4" type="submit">Send Broadcast</button>
</div>
</div>
</form>
</body>
让我们假设所有 3 个选项都被 selected 并传递到数组 recipients[]
views.py:
def broadcastSingle(request):
if request.method == 'POST':
bcName = request.POST['broadcast_name']
bcRecArray = request.POST['recipients[]']
bcContent = request.POST['broadcast_content']
print('PRINT : ',len(bcRecArray))
print(', '.join(bcRecArray))
bcRecArray 应该包含 ['aaaaaa', 'bbbbbb', 'cccccc'] 并且长度应该是 3
但是,bcRecArray 具有 ['c'、'c'、'c'、'c'、'c'、'c'] 和长度6
我认为,select2
multi-select 框只取最后一个 selected 值并将其转换为 selected 中的字母数组值。
我在使用 bootstrapDualListbox 时遇到了同样的问题。我想出的解决方案是使用隐藏文本字段,然后在提交时,将 multi-select 中的值复制到隐藏文本字段中:
// "employees" is a jQuery handle to the multi-select.
let data = employees.val();
if (data.length === 0) {
submitError('<p>{{ _('No employees selected') }}</p>', event);
} else {
//
// We want ints, not strings.
//
data = data.map(x => parseInt(x));
snapshot.val(JSON.stringify({"employees": data}));
}
返回服务器,当然 JSON 必须根据需要从隐藏文本字段中解压缩。
我已经从这个帖子中找到了答案: Django: using <select multiple> and POST
我应该改用 request.POST.getlist('recipients'), 因为 [] 在 django 中不起作用,因为它只是一个仅限于 PHP.
的约定谢谢,我会关闭此线程。