Pregunta

Tengo 2 opciones.Cuando se cambia DDLProduct, he ocultado y muestro algunas opciones en DDLPackage.El mapeo entre el producto y el paquete está en valor en cada opción de paquete.Como este

<select name="ctl00$MidContent$ddlPackage" class="selectpicker" id="ddlPackage" style="display: none;" data-width="100%" data-style="btn-own btn-select hideDisabled">
<option value="134260004;Administrace;AXAPTA">

Estoy dividiendo esta cadena y comparando si Última parte para el producto seleccionado actualmente.

para la Lista DropDownList se usa Bootstrap Extension: Bootstrap-Select http://silviomoreto.github.io/bootstrap-Seleccione / .

pero es demasiado lento.Expecialy en IE.

$("#ddlProduct").change(function () {
    var product = $("#ddlProduct option:selected").text().trim();
    $("#ddlPackage option").each(function () {
        var optValues = $(this).val().split(";");
        var opt2 = optValues[2].trim();

        if (opt2 == "") {
            $(this).show();
        }
        else {
            if (opt2 == product) {
                $(this).show();
            }
            else {
                $(this).hide();
            }
        }
    });
    $("#ddlPackage").val($("#ddlPackage option:first").val());
    $("#ddlPackage").selectpicker('refresh');

<asp:Panel ID="Panel39" runat="server" CssClass="row">
    <asp:Panel ID="Panel40" runat="server" CssClass="row compenserow col-lg-4 col-md-4 col-sm-6">
        <asp:Label ID="Label29" runat="server" CssClass="col-lg-4 col-md-4 col-sm-4 col-xs-4">Prudukt: </asp:Label>
        <asp:Panel ID="Panel63" runat="server" CssClass="bootstrap-select col-lg-8 col-md-8 col-sm-8 col-xs-8">
            <asp:DropDownList ID="ddlProduct"  data-style="btn-own btn-select" data-width="100%" runat="server" CssClass="selectpicker" ClientIDMode="Static"></asp:DropDownList>
        </asp:Panel>
    </asp:Panel>
    <asp:Panel ID="Panel41" runat="server" CssClass="row compenserow col-lg-4 col-md-4 col-sm-6">
        <asp:Label ID="Label31" runat="server" CssClass="col-lg-4 col-md-4 col-sm-4 col-xs-4">Balík: </asp:Label>
        <asp:Panel ID="Panel64" runat="server" CssClass="bootstrap-select col-lg-8 col-md-8 col-sm-8 col-xs-8">
            <asp:DropDownList ID="ddlPackage"  data-style="btn-own btn-select hideDisabled" data-width="100%" runat="server" CssClass="selectpicker" ClientIDMode="Static"></asp:DropDownList>
        </asp:Panel>
    </asp:Panel>
</asp:Panel>

¿Fue útil?

Solución

Su problema, en mi opinión, es esa operación de cadena.Se necesita mucho tiempo para procesar muchas opciones (espero alrededor de 100 opciones).Debe usar el atributo de datos en lugar de usar;como delimitador para múltiples informaciones en un valor de opción.

Su código puede verse así:

<option value="134260004;Administrace;AXAPTA" data-id="134260004" data-text="Administrace" data-product="AXAPTA">

y ahora solo lees lo que necesita con jquery:

$("#ddlPackage option").each(function () {
    var opt2 = $(this).data('product');

    if (opt2 == "") {
        $(this).show();
    }
    else if (opt2 == product) 
    {
        $(this).show();
    }
    else $(this).hide();
    }
});

De esta manera, no necesitará analizar tantas cadenas con cada evento de cambio y debería ser mucho más rápido :)

Otros consejos

Qué hay de agregar productos para filtrar como clases:

<option value="134260004;Administrace;AXAPTA" class="Administrace">

y

$("#ddlProduct").change(function () {
    var product= $("#ddlProduct option:selected").text().trim();
    $("#ddlPackage option:not(."+product+")").hide();
    $("#ddlPackage option ."+product).show();
});

o en el camino de Pirozek

<option value="134260004;Administrace;AXAPTA" data-text="Administrace">

y

$("#ddlProduct").change(function () {
    var product= $("#ddlProduct option:selected").text().trim();
    $("#ddlPackage option:not([data-text='"+product+"'])").hide();
    $("#ddlPackage option[data-text='"+product+"']").show();
});

De esta manera, también podría evitar esa operación de ajuste de cadena mencionada en la solución antes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top