5

使用 select2 jQuery 插件,我创建了一个标签框。因此,我使用了以下 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如果没有name属性,如何从 PHP中的变量中获取输入字段的数据/文本?我该如何管理?

设置JS如下:

$(document).ready(function() {
$("#tags").select2({
    placeholder: "Insert tag",
    allowClear: true,
    minimumInputLength: 2,
    maximumSelectionSize: 1,
    minimumWidth: 200
});

});

4

5 回答 5

1

显然,我用这个简单的代码片段解决了这个问题。

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

<input type="hidden" id="manufacturer" name="manufacturer" value="1">

以及选择中的 ID:

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

然后只需在同一页面中添加那个简单的 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>

于 2015-09-14T22:34:23.963 回答
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 变量的值。

于 2013-04-29T10:44:17.567 回答
0

我快速阅读了 select2 Github 帐户中的一些票证,其中一些人提到了这个问题。看来 select2 只是没有添加 name 属性。

您可以尝试在表单提交时通过 JS 动态添加一个,看看是否可行,

$('form').submit(function() {
    $('#s2id_autogen1').attr('name', 'whatever');
    return true;
});

或者您可以通过 ajax 提交表单并通过 ID 获取值并以这种方式发布

于 2013-04-29T10:46:07.417 回答
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')">
于 2015-01-22T14:01:15.033 回答
0

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

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

然后你可以像这样用 $_POST 得到数组:

$_POST['tags']
于 2017-05-10T14:38:58.317 回答