如何在加载后禁用级联kendo组合框?

时间:2014-04-01 16:56:33

标签: jquery kendo-ui kendo-combobox

我有两个剑道组合框,另一个是级联组合。他们都加载了他们的数据。问题是我想在选择后禁用第二个组合框(comboSequenceNumbers)。

我使用不同的两种方法来填充这些组合框。这是达到尝试禁用的操作顺序。

  1. 用户可以(A)扫描条形码或(B)从第一个组合框中选择(然后填充第二个组合框),然后从第二个组合框中进行选择。

  2. 用户完成方法(A)或(B)后,应禁用comboSequenceNumbers组合框。

  3. 选择(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);
    }
    

    有趣的是,如果我第二次扫描条形码,它实际上会禁用组合框。奇怪的是它需要第二次扫描。感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

这结果是一个时间问题。第二个组合框正确填充,数据设置正常;然而,有一些过程没有完成,因为它不会禁用组合框。

window.setTimeout(LockScanPanel, 100);

做了这个伎俩。