Я использую kendo comboBox в своем приложении, и мне нужно получить значение и идентификатор записи из ComboBox, вне фактической функции ComboBox.... Я использую выпадающее меню comboBox в таблице для каждой записи, поэтому я не могу передать идентификатор css для получения значения comboBox... Мне удалось достичь ввода comboBox выбранной записи, и я сделал этот тест, применив цвет фона к нему. Я тестировал.val(), который отлично работает только для ввода текстового поля, но его не происходит для kendo ComboBox...
Большое спасибо
<td class="N_td">@Html.TextBox("Input_MarkingSchemeTitle_Element", null, new { id = @item.ElementID + "_EMST", @class = "ElementMarkingSchemeTitle k1-grid-input k-textbox_3 _MarkSchemeId_Input" }) </td>
$("._MarkSchemeId_Input").kendoComboBox({
minLength: 1,
filter: 'contains',
dataTextField: "Name",
dataValueField: "ID",
dataSource: {
type: "json",
serverFiltering: false,
transport: {
read: "/Qualification/GetAllMarkScheme_JSON"
},
},
change: function () {
alert("value " + this.value() + " " + this.text());
}
});
$("#ElementTable").on("click", ".k1-grid-confirm", function () {
$(this).closest('table').find("._MarkSchemeId_Input").css("background", "red");
var a1 = $(this).closest('table').find("._MarkSchemeId_Input").text(); // doesn't work
alert("a1 " + a1);
.....
Взгляните на демо Kendo, на самом деле это точно показывает, что вас интересует
var fabric = $("#fabric").data("kendoComboBox");
var select = $("#size").data("kendoComboBox");
$("#get").click(function() {
alert('Thank you! Your Choice is:\n\nFabric ID: ' + fabric.value() + ' and Size: ' + select.value());
});
Поиск значения в вашем примере не работает, потому что вы вызываете метод в элементе html, а не в элементе управления Kendo. Рассмотрим этот пример:
$("#combobox").kendoComboBox({
dataSource: [ "Apples", "Oranges" ]
});
var combobox = $("#combobox").data("kendoComboBox");
combobox.value("Oranges");
Поэтому в вашем случае выполните следующие действия:
$(this).closest('table').find("._MarkSchemeId_Input").data("kendoComboBox").text()
По дизайну виджет ComboBox копирует все стили и классы CSS из исходного элемента в видимый вход. Это описано здесь. Если вы просмотрите вынесенный HTML, он будет выглядеть так:
<input class="custom-class" /> <script> $(function() { $(".custom-class").kendoComboBox(); }); </script>
<span class="k-widget k-combobox k-header custom-class"> <span tabindex="-1" unselectable="on" class="k-dropdown-wrap k-state-default"> <input class="k-input custom-class" type="text" autocomplete="off" style="width: 100%;"> <span tabindex="-1" unselectable="on" class="k-select"> <span unselectable="on" class="k-icon k-i-arrow-s" role="button" tabindex="-1"> select </span> </span> </span> <input class="custom-class" data-role="combobox" style="display: none;"> </span>
Как вы можете видеть, пользовательский класс копируется в элемент оболочки и на видимый вход. Из-за этого вам нужно будет использовать более конкретный селектор, чтобы найти только исходные элементы ввода:
$(".custom-class[data-role=combobox]");
Обратите внимание, что это вернет список элементов ввода. Если вам нужно получить выбранные элементы данных, вам нужно будет их закодировать и получить экземпляр combobox для каждого элемента ввода.
Здесь я подготовил простую демонстрацию jsBin, в которой показано, как это сделать.
Мне удалось решить проблему следующим образом:
<td class="N_td">@Html.TextBox("Input_MarkingSchemeTitle_Element", null, new { id = @item.ElementID + "_EMST", @class = "ElementMarkingSchemeTitle k1-grid-input k-textbox_3 _MarkScheme_Input" }) </td>
//--get all the MarkScheme from database and put in drop-down
$("._MarkScheme_Input").kendoComboBox({
minLength: 1,
filter: 'contains',
dataTextField: "Name",
dataValueField: "ID",
dataSource: {
type: "json",
serverFiltering: false,
transport: {
read: "/Qualification/GetAllMarkScheme_JSON"
},
},
change: function () {
// alert("value " + this.value() + " " + this.text()); //if it need to test selected record data...
}
});
$("#ElementTable").on("click", ".k1-grid-confirm", function () {
$(this).closest('table').find("._MarkScheme_Input").css("background", "red");
//read all the input 'comboxBox' in loop...
//var _comboBoxInput = $(this).closest('table').find("._MarkScheme_Input").filter("[data-role=combobox]");
//_comboBoxInput.each(function (idx, input) {
// alert("idx " + idx + " \n input " + input);
// var combobox = $(input).data("kendoComboBox");
// alert("ID>>> : " + combobox.value() + ", Text: >>> " + combobox.text());
//});
//-------------------------
var input = $(this).closest('table').find("._MarkScheme_Input");
var comboboxInput = input.filter("[data-role=combobox]");
var combobox = comboboxInput.data("kendoComboBox");
var selectedText = combobox.text();
var selectedValue = combobox.value();
var dataItem = combobox.dataItem();
alert("ID>>> : " + selectedValue + ", Text: >>> " + selectedText);
$(this).closest('table').find("._MarkSchemeId_Input")[0]