javascript - 使用 select2 插件添加或删除项目时如何更改隐藏的输入值

标签 javascript jquery jquery-select2 hidden-field

我使用 select2 插件并在用户输入至少 3 个字符时获取值。像这样从 php 获取 json 数据;

"1":"val1"  ,  "5":"val2"  ,  "19":"val3"....

我想在隐藏输入中存储所选项目的 id 值,并且当用户删除任何所选项目时,删除项目的 id 也会从隐藏输入中删除。例如;

当像下面这样选择 val1 和 val2 项时,隐藏输入的值(id 'hdn-id')也会像下面一样改变。

enter image description here

<input type="hidden" id="hdn-id" val="1,5" />

当 val1 被删除时,该项目的 id (1) 从隐藏输入中删除,如下所示;

enter image description here

<input type="hidden" id="hdn-id" val="5" />

但我做不到。我的代码;

选择2:

function selectAjax(element,url,hiddenElement) {

var selectedItemsArray = []
$('#'+element).select2({

    multiple: multi,

    id: function(element) {
        return element
    },

    ajax: {
        url: url,
        dataType: 'json',
        data: function(term,page) {
            return {
                term: term,
                page_limit: 10
            };                        
        },
        results: function(data,page) {
            var titleArr    = [];
            $.each(data, function(k,v){
               titleArr.push(k+':'+v);
            });

            return {
                results: titleArr
            };
        }
    },

    formatResult: formatResult,
    formatSelection: formatSelection,

});

function formatResult(data) {
   return '<div>'+data.substr(data.indexOf(':')+1)+'</div>'
};

function formatSelection(data) {

    var id   = data.split(':',1),
        text = data.substr(data.indexOf(':')+1),                    
        hiddenElementValue = eval([jQuery('#'+hiddenElement).val()]);
        selectedItemsArray.push(id);
        jQuery('#'+hiddenElement).val(selectedItemsArray);

    return '<div data-id="'+id+'" class="y-select2-selected-items">'+text+'</div>';        
};


}


selectAjax('select2-element','ajx.php','hdn-id');

HTML:

<input type="text" id="select2-element" />
<input type="hidden" id="hdn-id" />

我可以使用上面的代码将 id 存储在隐藏输入中,但是当删除项目时,我无法从隐藏输入中删除 id。因为插件将“return false”分配给元素的 onclick 事件。我想,我用上面的代码交了这份工作。我怎样才能成为更好的解决方案?

最佳答案

您可以使用 select2 插件的 change 事件,并编写一些代码来更新隐藏输入的值。

    $("#select2-item").select2({
        //options go here
    });
    $("#select2-item").on("change", function(e) { 
        //update hidden input value
    });

关于javascript - 使用 select2 插件添加或删除项目时如何更改隐藏的输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510280/

相关文章:

jquery - 将 "this"添加到 jQuery 中 "each"的父堆栈

javascript - 如何根据下拉选择填充文本值类型的输入 - Angular 5

jquery - 选择2 : How to prevent tags sorting

jquery - 简单的 jQuery 文件上传插件(仅使用 iframe)

javascript - 在 JavaScript 中将对象字段与变量连接起来

javascript - 将 Javascript Window.open 函数延迟 2 秒

javascript - 图片不在生产构建中显示,仅在开发中显示(webpack/sass-loader)

javascript - jQuery keyup 事件未获取正确的值

jquery - select2 插件和 jquery ui 模式对话框

javascript - 我从 Ruby 到 JavaScript 的翻译给出了不同的结果