Pregunta

Tengo una tabla con varias filas en cada fila que es una lista de selección y, según la selección (cuando se activa el evento onchange), aparecen paneles que contienen datos adicionales debajo de la fila. Actualmente tengo un código como este:

 var allPnls = '.inv-dtl-comnts-add,.inv-dtl-comnts-update';
    $(document).ready(function(){
    hideAll();

    //select action change
    $(".inv-dtl-ddlaction").change(onSelectChange);

    $(".btn-cancel").click(function(event){
        slideAll();
        $(".inv-dtl-ddlaction").val('[Select an Action]');
        return false;
    });

});

    function onSelectChange(event){

    //find out which select item was clicked
    switch($(this).val())
    {
        case 'View/Add Comment':
            $(this).closest(".row").children(allPnls).slideUp("fast",
                function(){
                    $(this).closest(".row").children(".inv-dtl-comnts-add").slideToggle("fast");
            });
            break;
        case 'Change Status':
            $(this).closest(".row").children(allPnls).slideUp("fast",
                function(){
                    $(this).closest(".row").children(".inv-dtl-comnts-update").slideToggle("fast");
            });
            break;
        default:
            //code to be executed if n is different from case 1 and 2
    }

 }

 function hideAll(){
    $(allPnls).hide();
 }
 function slideAll(){
    $(allPnls).slideUp("fast");
 }

Así que estoy ocultando todos los paneles cuando se carga la página y si un panel ya está abierto, quiero cerrarlo antes de volver a abrir el nuevo panel. Esto funciona con la devolución de datos. Con solo un panel en la selección, funcionó muy bien, pero con dos paneles el deslizamiento hacia arriba ocurre dos veces (parece deslizarse hacia abajo paneles sin abrir antes de volver a deslizarlos hacia arriba). ¿Cómo puedo ajustar esto para que todos los paneles que figuran en la variable allPnls se cierren SOLAMENTE si ya están abiertos? ¿Hay una mejor manera de cerrar los paneles y luego tener una devolución de llamada para que el slideToggle funcione?

Lloyd

¿Fue útil?

Solución

Puede cerrar solo los paneles visibles o abiertos agregando: visible en el selector de la siguiente manera:

var allPnls = '.inv-dtl-comnts-add:visible,.inv-dtl-comnts-update:visible';

No estoy seguro de si esto solucionaría su problema. Tal vez si proporciona una página de muestra que represente este problema, podría ayudar.

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