Select2不会创建名称属性

时间:2013-04-29 10:37:47

标签: php jquery post tags jquery-select2

使用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
});

});

5 个答案:

答案 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)

我确实用这个简单的片段解决了这个问题。

我添加了一个隐藏的输入:

&#13;
&#13;
<input type="hidden" id="manufacturer" name="manufacturer" value="1">
&#13;
&#13;
&#13;

选择中的ID:

&#13;
&#13;
<select class="full-width required" data-placeholder="Select Country" data-init-plugin="select2" required id='myselect'>
&#13;
&#13;
&#13;

然后只需在同一页面中添加简单的JS即可在每次用户更改值时更改隐藏值:

&#13;
&#13;
    <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;
&#13;
&#13;

答案 4 :(得分:0)

这是一个老问题,但当前select2 4.x.x版本的正确答案是将name属性设置为数组

<select id="tags" multiple="" name="tags[]">

然后你可以使用$ _POST获取数组:

$_POST['tags']