1

2 つの剣道コンボボックスがあり、一方が他方からカスケードします。どちらもデータを正常にロードします。問題は、選択が行われた後に 2 番目のコンボボックス (comboSequenceNumbers) を無効にしたいことです。

これらのコンボボックスに入力するために使用する 2 つの方法があります。無効化が試行されるポイントに到達するための操作の順序は次のとおりです。

  1. ユーザーは、(A) バーコードをスキャンするか、(B) 最初のコンボボックスから選択して (2 番目のコンボボックスに入力)、2 番目のコンボボックスから選択することができます。

  2. ユーザーが方法 (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);
}

興味深いことに、バーコードをもう一度スキャンすると、実際にはコンボボックスが無効になります。2回目のスキャンが必要なのは奇妙です。どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

0

これはタイミングの問題であることが判明しました。2 番目のコンボボックスは正しく入力されており、そのデータ セットは適切に設定されていました。ただし、コンボボックスを無効にしないため、プロセスが終了していないものがありました。

window.setTimeout(LockScanPanel, 100);

トリックをしました。

于 2014-04-01T18:13:57.807 に答える