2016-06-13 46 views
1

在附带的提琴中,当选择的选择加载时,我有两个选项预先填充“丹麦”和“法国”。如果我在选择框中选择更多的值并单击清除按钮,我想用相同的预填充值“丹麦”和“法国”来恢复所选择的选择。在选定的选择中恢复预选值

我想更改此代码以预先填写选定的值。

$("#Clear").click(function() { 
    $('.chosen-select option').prop('selected', false).trigger('chosen:updated'); 
}); 

JSFiddle

UPDATE: 这将是非常好的,如果有这样的,它并不重要的选项预填充的方式,但他们应该可以恢复,如果有的话。

回答

1

您需要的是创建一个预选选项值的数组。然后,可以使用此阵列的forEach循环更改selected的值,并在触发器更新之前获取初始状态。

$("#countries").chosen(); 

let preselected = []; 

$('[selected]').each((i, node) =>{ 
    preselected.push($(node).attr('value')); 
}); 

$("#Clear").click(function() { 
    $('.chosen-select option').prop('selected', false); 

    preselected.forEach(pre => { 
     $(".chosen-select option[value='" + pre + "']") 
     .attr('selected', 'selected') 
     .trigger('chosen:updated'); 
    }); 
}); 

Fiddle

正如你可以看到here没有什么你可以用它来实现这个插件,看来你必须改变你的DOM和触发更新去做。我会使用来自luckyape答案和我的代码,混合它。

+0

有没有办法让它这样,没关系选项预先填充什么,但他们应该可以恢复,如果有的话? – Jake

+0

那么你可以循环onload时知道哪些元素被选中并检索它。 –

+0

查看更新的代码和小提琴。 –

2

给这个一去

$("#countries").chosen(); 

$("#Clear").click(function() { 
    $('.chosen-select option').prop('selected', false); 
    $('.chosen-select').val(['Denmark', 'France']).trigger('chosen:updated'); 
}); 

http://jsfiddle.net/y5cnd018/

+1

这也适用,但有没有办法让它这样:预装哪些选项并不重要,但是应该恢复它们,如果有的话? Jose在上面给出了一个很好的解决方案,但是想知道如果选择了已经有的东西,就像你提供的那样。 – Jake

+1

看我的编辑@Jake似乎没有什么文档。 –