2016-06-13 44 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似乎沒有什麼文檔。 –