El cuadro de texto oculto con javascript se vuelve visible cuando ocurren otros eventos

Cuando se cambia un valor desplegable (de ddlSource), tengo JavaScript que ocultará algunos cuadros de texto, lo que está funcionando bien. Luego, cuando el usuario ingresa un cierto valor en otro cuadro de texto, tengo una llamada ajax para completar algunas etiquetas. Después de esta llamada ajax cuando se carga el formulario, los cuadros de texto ocultos ahora están visibles. ¿Dónde me he equivocado?



    
    
    


y mi JavaScript para enabledisable es

function DisableEnable() {
    var DropDown_Source = document.getElementById("<%= ddlSource.ClientID %>")

    if (DropDown_Source.options[DropDown_Source.selectedIndex].text == "y") {

        document.getElementById('txtSupplementNbr').style.visibility = 'visible';
        document.getElementById("txtDelDate").style.visibility = 'visible';
        document.getElementById('lblSupplementNbr').style.display = '';
        document.getElementById('lblDelDate').style.display = '';
    }

    else {
        document.getElementById("txtSupplementNbr").style.visibility = 'hidden';
        document.getElementById("txtDelDate").style.visibility = 'hidden';
        document.getElementById('lblSupplementNbr').style.display = 'none';
        document.getElementById('lblDelDate').style.display = 'none';
    }
}

El cuadro de texto que hace la llamada ajax


    
        
    

Después de que ejecuta la función OnTextChanged() , veo todos los controles que estaban ocultos antes. Cualquier ayuda sería apreciada.

0
¿Podemos ver el código para su función GetCaseSummaryCivilPlaintiffInfo ?
agregado el autor Lopsided, fuente

2 Respuestas

El html se vuelve a procesar debido a la solicitud ajax a su estado inicial. Llame a DisableEnable() en ajax request ends usando Sys.WebForms.PageRequestManager endRequest Event para actualizar el estado de los elementos del formulario.

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args)
{
     DisableEnable();
}

También puede colocar todos los controles que cambian en el panel de actualización para que su estado sea mantenido por asp.net entre las llamadas ajax.

0
agregado
Solo hay un cuadro de texto en el panel de actualización y no significa ningún cambio en dichos objetos, algo confuso.
agregado el autor Adil, fuente
Corrígeme si me equivoco, pero ¿el panel de actualización no volvería a presentar los elementos dentro de su plantilla de contenido? Cuando solía usarlos (aunque en su lugar pasé a usar JavaScript ajax calls), solo las variables JavaScript que hacían referencia a los elementos dentro de los paneles de actualización debían redefinirse en el evento endRequest.
agregado el autor Lopsided, fuente
Esos son mis pensamientos exactamente. Creo que el problema puede ser un error en su función GetCaseSummaryCivilPlaintiffInfo . La principal diferencia que veo es su omisión del () después de la función javascript, pero no puedo recordar si esto es código-breaking. Le pedí que publicara esta función por si acaso.
agregado el autor Lopsided, fuente

No debería necesitar manejar la visibilidad Y la visualización en su función de alternancia. La principal diferencia es que la visibilidad oculta el elemento pero mantiene su posición, deshacerse de él. El valor de visualización debería funcionar bien para usted. Aquí hay una pantalla más simple alternar la secuencia de comandos, pasarle un objeto y se verificará para ver si ya se muestra o no.

function toggle(obj) {
    var el = document.getElementById(obj);
    if ( el.style.display != 'none' ) {
        el.style.display = 'none';
    }
    else {
        el.style.display = '';
    }
}

Ahora solo quiere asegurarse de que solo se invoque cuando lo desee y Onchange continuará alternando la visualización. Creo que la respuesta de @Adil administrará esa parte de su pregunta.

0
agregado
JavaScript - Comunidad española
JavaScript - Comunidad española
4 de los participantes

En este grupo hablamos de JavaScript. Partner: es.switch-case.com