2011-12-28 897 views
9

如何在JQuery UI Multiselect中添加或刪除選項?我正在初始化頁面加載時的多重選擇,我需要刪除現有值並根據其他選擇添加新值。我使用的初始化頁面加載多選:jquery multiselect重新加載

$("#multipleselectboxId").multiselect(); 

在那之後,我沒有得到反映增加值到多個下拉使用jQuery append()remove()方法,它們與原來的下拉,但在多選工作正常。

任何人都可以幫忙嗎?

回答

13

我發現這個解決方案,第一摧毀multiselect並重新初始化它,感謝@ Brandon Joyce,

解決方案是

$("#multipleselectboxId").append(toAppend); 
$("#multipleselectboxId").remove(toRemove); 

$("#multipleselectboxId").multiselect('destroy'); 
$("#multipleselectboxId").multiselect(); 
+1

這個答案讓我感到困惑。你能解釋你的解決方案的前兩行以及它們與重新加載的關係嗎? – IcedDante 2015-01-29 17:06:57

+0

對不起,你確定你不應該接受@Brandon Joyce答案作爲第一個提供真實答案嗎?! – 2016-08-01 06:12:27

+0

正是我在找的東西!在初始化multiselect之前使用'destroy'來解決我的問題!謝謝! – AxleWack 2017-05-26 11:32:03

20

對於一個你可以只破壞和改變後重新初始化...

$("#multipleselectboxId").append(toAppend).multiselect("destroy").multiselect(); 

還有另一個插件具有刷新功能:EricHynds's Multiselect

$("#multipleselectboxId").append(toAppend).multiselect("refresh"); 
+0

沒有。我試過了,它不工作,你提到的插件和我使用的插件不一樣,我從這個鏈接中使用http://quasipartikel.at/multiselect_original/ – 2011-12-28 08:22:12

+1

啊,好吧,如果一切都失敗了,你能不能銷燬它並重新初始化?它看起來像使用了widget工廠,所以這應該是可能的。 – 2011-12-28 08:49:40

+0

你可以根據我的下面的答案更新你的答案,以標記爲已接受的答案 – 2011-12-28 09:00:07

1

以及這個插件工作正常,但我有一個與銷燬和過濾器的PB:我的組合數據加載了AJAX。所以,當我刷新與Ajax調用的數據,我所說銷燬刷新插件:

myCombo.multiselect('destroy'); 
myCombo.multiselect().multiselectfilter(); 

它適用於第一個電話:空連擊,AJAX調用加載數據,可撥打以上功能。 但是,如果我刷新組合數據並再次調用上述功能,過濾器消失了? 有人經歷過這個pb並找到解決方案嗎?

0

我用它這樣:

$("#<%= cmbInBayiID.ClientID %>").multiselect().trigger('reset'); 

它的工作。

+2

使用scriplets是不好的,你應該感覺不好。 – 2012-09-24 08:12:45

3

我試圖重建.multiselect("destroy").multiselect()多選,但它沒有工作,所以最後我覺得這個解決方案爲我工作。

$.each(jsonArray, function(i, val) { 
    $('#frmarticles-f_category_id').append('<option value="'+i+'">'+val+'</option>').multiselect('rebuild'); 
}); 
1

謝謝你的幫助。我用的是多選UI部件,這是什麼工作

jQuery("select[title='" + FieldNameTitleText + "']").append("<option value='" + OptionValue+ "'>" + OptionText + "</option>").multiselect("refresh"); 
+0

「append()」使用「刷新」工作正常後鏈接與否。謝謝。 – caglaror 2016-03-04 11:28:46

0

就我而言,我只是想取代多選的新所有以前的內容。

這爲我工作:

$('#multiselect_id').html(newHtml); 
$('#multiselect_id').multiselect('refresh'); 
0

這裏是我做過什麼:;它可能超過必要,但它對我有用。

原「中選擇」代碼,需要修改:

<select id="MySelect" name="selection"> 
<option value="1">One</option> 
<option value="2">Two</option> 
</select> 

我重建的選項列表在PHP中,它通過JSON發送到JavaScript和建造/存儲在一個變量的新名單。例如:

// this is similar to if we got it from PHP 
var newList = '<option value="A">Alpha</option> 
<option value="B">Beta</option> 
<option value="C">Gamma</option>'; 

現在,在jQuery UI的多選小部件周圍切換這樣的:

$('#MySelect').html(''); // clear out old list 
$('#MySelect').multiselect('destroy'); // tell widget to clear itself 
$('#MySelect').html(newList); // add in the new list 
$('#MySelect').multiselect(); // re-initialize the widget 

特別是,我帶參數的重新初始化它,如:

$('#MySelect').multiselect({selectedList: 4, header: false}); 

如果任何人都讀過這麼多,仍然有麻煩,試試這個。

0

對於wenzhixin MultiSelect

var i = jQuery('input'); 
i.data('multipleSelect').$parent.remove(); 
i.removeData('multipleSelect'); 
i.show(); 
0
function setMultiSelect(idElement, paramVal){ 
     eval("$('#"+idElement+"').multiselect('uncheckAll')"); 
     $.each($('input[name="multiselect_'+idElement+'"]'), function(k,i) {  
      if(paramVal.indexOf(this.value)!=-1){ 
       this.checked = true; 
      } 
     }); 
     eval("$('#"+idElement+"').multiselect('update')"); 
    } 
+1

你能解釋一下這是什麼嗎? – Vemonus 2017-01-25 18:15:15

0
var valArr = ["1", "2"], 
     i = 0, 
     size = valArr.length, 
    $options = $('#MySelect option'); 

for (i; i < size; i++) { 
    $options.filter('[value="' + valArr[i] + '"]').prop('selected', true); 
} 

$('#MySelect').multiselect('reload'); 

1.valArr是
2.對於環選擇選項的值來設置選擇爲基於valArr
3。我們的變化是匹配的選項只在隱藏選擇元素
4.to改變多選生成的元素,我們需要重新加載
5.every插件可能有不同的名稱重新加載,例如:更新,刷新

+1

不要只是將代碼發佈爲aswer。解釋一下。 – 2017-07-11 13:23:36