我有两个剑道组合框,另一个是级联组合。他们都加载了他们的数据。问题是我想在选择后禁用第二个组合框(comboSequenceNumbers)。
我使用不同的两种方法来填充这些组合框。这是达到尝试禁用的操作顺序。
用户可以(A)扫描条形码或(B)从第一个组合框中选择(然后填充第二个组合框),然后从第二个组合框中进行选择。
用户完成方法(A)或(B)后,应禁用comboSequenceNumbers组合框。
选择(B)以其需要的方式禁用组合框,第一种方法(A)导致问题。在此过程中不会抛出任何错误,但也不会发生禁用。
这是组合框。
<div class="divAssTypesComboBox">
@(Html.Kendo().ComboBox()
.Name("comboAssTypes")
.Filter("contains")
.Placeholder("Select Asset Type...")
.DataTextField("Asset")
.DataValueField("Asset_Id")
.Suggest(true)
.HtmlAttributes(new { style = "width: 100%" })
.DataSource(source =>
{
source.Read(read =>
{
read.Action("Get_AssetTypes", "ScanPanel");
});
})
)
</div>
<div class="divSequenceNumbersComboBox">
@(Html.Kendo().ComboBox()
.Name("comboSequenceNumbers")
.HtmlAttributes(new { style = "width: 100%" })
.Placeholder("Select Sequence Number...")
.DataTextField("Sequence_Numbers")
.DataValueField("Tag_Id")
.Filter(FilterType.Contains)
.DataSource(source =>
{
source.Read(read =>
{
read.Action("Get_SequenceNumbers", "ScanPanel")
.Data("get_Selected_Asset");
})
.ServerFiltering(true);
})
.Enable(false)
.AutoBind(false)
.CascadeFrom("comboAssTypes")
.Events(e =>
{
e.Change("onSequenceNumberChange");
}
)
)
</div>
以下是通过扫描或手动输入数据来调用的方法。
// Going this route does not disable the combobox...
// even though the disable method is the same as the other route's.
$(document).scannerDetection(function (scandata) {
$.ajax({
url: '@Url.Action("Get_ScanPanelFromAUIB", "ScanPanel")',
type: 'POST',
data: { AUIB: scandata.trim() },
success: function (data) {
$('#comboAssTypes').data('kendoComboBox').value(data.AssTypeID);
$('#comboSequenceNumbers').data('kendoComboBox').value(data.SeqNumID);
LockScanPanel();
},
failure: function (e) {
alert('Scan failed. Please check the barcode and try again.');
}
});
});
// Going this route disables the combobox after selection, as desired.
function onSequenceNumberChange() {
var seqTagNum = { tagnum: $("#comboSequenceNumbers").val() };
$.ajax({
url: '@Url.Action("Get_ScanPanelFromTagNumber", "ScanPanel")',
type: 'POST',
data: seqTagNum,
success: function (data) {
LockScanPanel();
}
});
}
function UnlockScanPanel() {
var comboAss = $("#comboAssTypes").data("kendoComboBox");
var comboSeq = $("#comboSequenceNumbers").data("kendoComboBox");
comboAss.enable();
comboSeq.enable();
}
function LockScanPanel() {
var comboAss = $("#comboAssTypes").data("kendoComboBox");
var comboSeq = $("#comboSequenceNumbers").data("kendoComboBox");
comboAss.enable(false);
comboSeq.enable(false);
}
有趣的是,如果我第二次扫描条形码,它实际上会禁用组合框。奇怪的是它需要第二次扫描。感谢任何帮助,谢谢!
答案 0 :(得分:0)
这结果是一个时间问题。第二个组合框正确填充,数据设置正常;然而,有一些过程没有完成,因为它不会禁用组合框。
window.setTimeout(LockScanPanel, 100);
做了这个伎俩。