2013-03-21 17 views
0

隨着新的劍道multiselect如何將選項添加到列表,並使他們被選中?添加到kendoMultiSelect

例如,如果我有一個下拉菜單中包含:1,2,3,我想添加4和5我該怎麼做?我是否必須銷燬多重選擇,添加選項,然後重新選擇多重選擇?

回答

2

鑑於以下multiselect定義:

var data = 
     [ 
      { text: "Africa", value: "1" }, 
      { text: "Europe", value: "2" }, 
      { text: "Asia", value: "3" }, 
      { text: "North America", value: "4" }, 
      { text: "South America", value: "5" }, 
      { text: "Antarctica", value: "6" }, 
      { text: "Australia", value: "7" } 
     ]; 

var multi = $("#select").kendoMultiSelect({ 
    dataTextField: "text", 
    dataValueField: "value", 
    dataSource: data 
}).data("kendoMultiSelect"); 

您可以使用:

var values = multi.value(); 

爲了得到值的列表。

而對於其值設置爲南美(與value 5元)和「亞洲」(與value 3元)使用方法:

multi.value(["5", "3"]) 

如果你想添加到任何有那麼值你需要一個小竅門:

var multi = $("#select").kendoMultiSelect({ 
    dataTextField: "text", 
    dataValueField: "value", 
    dataSource: data, 
    value: ["1", "2", "3"] 
}).data("kendoMultiSelect"); 

// Adding value 4 and 5 to current content 
var values = multi.value().slice(); 
$.merge(values, ["4", "5"]); 
multi.value(values); 

警告:如果值4和5已經選定你最終將讓他們重複。

+0

也許我誤解,但不是這只是選擇現有的值?你如何添加新的值6和7,然後將它們添加到列表中? – bbodenmiller 2013-06-14 00:32:27

+0

是的,這只是將_adding_值添加到選定列表中,而不是將值添加到原始「DataSource」。爲了向'DataSource'添加值,你可以使用multi.dataSource.insert({text:「Atlantida」,value:「8」})或multi.dataSource.add({text:「Atlantida」,value :「8」})' – OnaBai 2013-06-14 08:13:14

+0

謝謝,我會嘗試。雖然聽起來像原來的海報實際上是這樣問的。 「將選項添加到列表中並使其選中」 – bbodenmiller 2013-06-14 14:18:55

0

只是想添加一些關於如何實際向多重選擇添加新值的信息。

作爲OnaBai所指出的,該代碼將項目添加到多選擇是

$("#SDropDown").data("kendoMultiSelect").dataSource.add({ Text: x, Value: y }); 

給出的.cshtml

@(Html.Kendo() 
    .MultiSelect() 
    .Name("SDropDown") 
    .AutoBind(true) 
    .Placeholder("Select s...") 
    .DataTextField("Text") 
    .DataValueField("Value") 
) 

爲了添加一個項目作爲輸入多選掛鉤文本輸入的更改事件。由於這不是唯一標識,所以我使用XPath來獲取元素<input>。這被鉤住document.ready(在.cshtml,所以逃避@):

$(document).ready(function() { 
    var node = document.evaluate('//select[@@id="SDropDown"]/../div[contains(@@class,"k-multiselect")]/input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 
    if (node) 
    { 
     node.onkeypress = SChanged; 
    } 
} 

function SChanged(e) 
{ 
    // only append on enter 
    if (kendo.keys.ENTER == e.keyCode) 
    { 
     // updates multi-select data source 
     AddToOrganizations(this.value); 

     var multi = $("#SDropDown").data("kendoMultiSelect"); 

     multi.dataSource.filter({}); //clear applied filter before setting value 

     // keep all currently selected items and append the user entered text 
     // (does not check for duplicates) 
     // Also, the new values can only be selected after the data source has 
     // been updated. 
     var values = multi.value().slice(); 
     $.merge(values, [this.value]); 
     multi.value(values); 
    } 
}