页面加载后立即设置 select2 值

Posted

技术标签:

【中文标题】页面加载后立即设置 select2 值【英文标题】:Set select2 value as soon as page loads 【发布时间】:2015-10-21 11:11:32 【问题描述】:

我知道这个问题已经被问过好几次了,但实际上我已经研究了 4 个小时的解决方案,但找不到针对我的具体问题的解决方案。

我在 Laravel 刀片编辑视图上有一个 select2 选择字段,我想将它的值设置为传递给视图的数据。将数据传递给视图已经发生了,使用选择字段也没有问题,它工作得很好。但是我一直在尝试的每一次尝试都无法设置它。我一直在搞乱一个按钮来设置选择字段的值,但是每次修改

$("select[name=customer]").val("1");

未能做到这一点。它总是传输“?id = null”。我会很感激有人对此有所了解,因为没有这个我真的无法继续。我在下面添加重要的代码部分,如果您需要更多内容,请回复。提前致谢!


选择 HTML:

<label>*Customer</label>
<select class="form-control" name="customer" id="customer" style="width: 100%">
     <option></option>
</select>

选择2:

$("select[name=customer]").select2(
    allowClear : true,
    placeholder : "Choose customer",
    ajax : 
        url : "/search/autocomplete/get_customers",
        dataType : 'json',
        type : "GET",
        quietMillis : 50,
        delay : 250,
        data : function(params) 
            return 
                filter : params.term
            ;
        ,
        processResults : function(data) 
            return 
                results : $.map(data, function(item) 
                    return 
                        text : item.name + ' (' + item.customer_code + ')',
                        id : item.id
                    
                )
            ;
        ,
        initSelection : function (element, callback) 
              var data = [];
              $(element.val()).each(function () 
                data.push(id: this, text: this);
              );
              callback(data);
        
    
);

按钮:

<button type="button" onclick="test()">Test</button>

函数测试():

function test()         
    $("select[name=customer]").val("1");
;

我一直在尝试对此进行一些更改,示例:

$("select[name=customer]").val("1");
$("select[name=customer]").val("1").change();
$("select[name=customer]").val("1").trigger("change");
$("select[name=customer]").select2("val", "1");

列表继续。

如果我没有提供重要的东西,请给我留言或重播!

最好的问候

尼克

【问题讨论】:

【参考方案1】:

首先您应该使用console.log(); 检查选择器是否正确。这次使用单引号作为属性名称。 select[name='customer']

 var select = $("select[name='customer']");
 console.log(select.length);

如果它提供 0,则选择器是错误的。如果您在使用复杂的 CSS 选择器时遇到问题,您可能应该只使用 ID。

如果 jquery 选择器正确但出现错误,很可能是因为您通过 ajax 获取值并且不等待回调/成功。利用 jQuery 的 ajax 成功功能。

$.ajax(
    url: '...',
    success: function(response) 
        test();
    
);

你可以试试这样的。

$("select[name=customer]").select2(
    allowClear : true,
    placeholder : "Choose customer",
    ajax : 
        url : "/search/autocomplete/get_customers",
        dataType : 'json',
        type : "GET",
        quietMillis : 50,
        delay : 250,
        success: function()
            test();
        ,
        data : function(params) 
            return 
                filter : params.term
            ;
        ,
        processResults : function(data) 
            return 
                results : $.map(data, function(item) 
                    return 
                        text : item.name + ' (' + item.customer_code + ')',
                        id : item.id
                    
                )
            ;
        ,
        initSelection : function (element, callback) 
              var data = [];
              $(element.val()).each(function () 
                data.push(id: this, text: this);
              );
              callback(data);
        
    
);

【讨论】:

选择器是正确的,我在几个地方都在使用它。即使,我记录了它并返回 1。我不能安静地抓住我应该在哪里做那个 ajax 请求,你能解释一下吗?感谢您的回答! 我不确定是否在 select2 扩展中提供了这个成功回调,但我给出了一个你可以尝试的小例子。您应该检查您要选择的选项是否已经可用。 这似乎没有任何作用。但是,我要总结一下我的需求,所以我们肯定是在一条线上。我基本上想使用给定的 id 将输入字段设置为特定数据。

以上是关于页面加载后立即设置 select2 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5.2 中重新加载页面后保留 select2 值?

从验证重新加载页面后,带有 Select2 的 Laravel 输入值不会持续存在

页面加载时在 Select2 上设置所选项目 (ASPX)

select2 下拉自动宽度无法正常工作

加载页面时将值发布到相关下拉菜单

页面加载后如何立即调用javascript方法[重复]