使用select2 jQuery PlugIn我创建了一个标签框。因此我使用了以下html表单代码:
<form action="someAction" method="post">
<fieldset>
<select id="tags" multiple="" name="tags">
<option value="tag1">val1</option>
<option value="tag2">val2</option>
<option value="tag3">val3</option>
</select>
<button type="submit" class="btn">Submit</button>
</fieldset>
</form>
Select2从中生成以下字段:
<input type="text" class="select2-input" autocomplete="off" id="s2id_autogen1" style="width: 10px;">
问题在于缺少name
属性。如果没有$_POST
属性,如何从PHP中的name
变量中获取输入字段的数据/文本?我该如何管理?
安装JS如下:
$(document).ready(function() {
$("#tags").select2({
placeholder: "Insert tag",
allowClear: true,
minimumInputLength: 2,
maximumSelectionSize: 1,
minimumWidth: 200
});
});
答案 0 :(得分:0)
POST需要名称才能工作,但我注意到它有一个id:
id="s2id_autogen1"
使用JS通过id获取值并发布它。
如果id不断变化,您可以使用以下类:
HTML:
<form action="someAction" method="post">
<fieldset>
<!-- This will contain the value from the generated input -->
<input type = 'hidden' name = 'myField' id = 'myField' />
<select id="tags" multiple="" name="tags">
<option value="tag1">val1</option>
<option value="tag2">val2</option>
<option value="tag3">val3</option>
</select>
<button type="submit" class="btn">Submit</button>
</fieldset>
JS
$(document).ready(function(){
$("#tags").select2({
placeholder: "Insert tag",
allowClear: true,
minimumInputLength: 2,
maximumSelectionSize: 1,
minimumWidth: 200
});
//Make it so everytime the input with the class select2-input value is changed
//the value gets copied into the element with the id myField
$('input.select2-input').live('change', function(){
$('input#myField').val($(this).val());
});
});
像这样提交表单将自动包含POST变量中的值。
答案 1 :(得分:0)
我快速阅读了select2 Github帐户中的一些故障单,其中有几个提到了这个问题。看来select2只是没有添加name属性。
你可以尝试在表单提交上通过JS动态添加一个,看看是否有效,
$('form').submit(function() {
$('#s2id_autogen1').attr('name', 'whatever');
return true;
});
或者您可以通过ajax提交表单并通过ID获取值并以此方式发布
答案 2 :(得分:0)
经过多次阅读,我决定更改select2.js本身。
在2109行将其更改为
this.focusser.attr("id", "s2id_"+this.select.context.id);
如果你的输入标签是这样
<select id="fichier">
因此,搜索整个列表的输入代码的ID为 s2id_fichier_search
据我所知,不应该存在冲突,这将允许您在同一页面上拥有多个select2并通过其事件运行您的功能,例如。
$(function() {
$('#s2id_fichier_search').keyup(function() {
console.log('Be Practical')
})
}
所以这会像你使用
一样运行<select id="fichier" onkeyup="console.log('Be Practical')">
答案 3 :(得分:0)
我确实用这个简单的片段解决了这个问题。
我添加了一个隐藏的输入:
<input type="hidden" id="manufacturer" name="manufacturer" value="1">
&#13;
选择中的ID:
<select class="full-width required" data-placeholder="Select Country" data-init-plugin="select2" required id='myselect'>
&#13;
然后只需在同一页面中添加简单的JS即可在每次用户更改值时更改隐藏值:
<script type='text/javascript'>
$(function() {
$('#myselect').change(function() {
// if changed to, for example, the last option, then
// $(this).find('option:selected').text() == D
// $(this).val() == 4
// get whatever value you want into a variable
var x = $(this).val();
// and update the hidden input's value
$('#manufacturer').val(x);
alert("cambiado");
});
});
</script>
&#13;
答案 4 :(得分:0)
这是一个老问题,但当前select2 4.x.x版本的正确答案是将name属性设置为数组
<select id="tags" multiple="" name="tags[]">
然后你可以使用$ _POST获取数组:
$_POST['tags']