none
Ejecutar Pop-UP si se cumple una condición RRS feed

  • Pregunta

  • Hola

    Tengo un script que lanza un pop-up cuando presiono el boton, pero ahora necesito que se ejecute cuando se cumpla una condición en un If al presionar dicho botón.

    El Script es este:

    $(function () {
        $("[id*=btnDelete]").removeAttr("onclick");
        $("#dialog").dialog({
            modal: true,
            autoOpen: false,
            title: "Confirmación",
            width: 350,
            height: 160,
            buttons: [
    {
        id: "Yes",
        text: "Yes",
        click: function () {
            $("[id*=btnDelete]").attr("rel", "delete");
            $("[id*=btnDelete]").click();
        }
    },
    {
        id: "No",
        text: "No",
        click: function () {
            $(this).dialog('close');
        }
    }
            ]
        });
        $("[id*=btnDelete]").click(function () {
            if ($(this).attr("rel") != "delete") {
                $('#dialog').dialog('open');
                return false;
            } else {
                __doPostBack(this.name, '');
            }
        });
    });

    Y lo ejecuto desde un boton:

    <asp:Button ID="btnDelete" runat="server" Text="Button" ></asp:Button>

     <div id="dialog" style="display: none" align="center">
            Registrar un nuevo Libro?
      </div>

    Muchas gracias....


       


    Respuesta de foro Microsoft

    jueves, 16 de marzo de 2017 23:47

Respuestas

  • Ah, eso es muy distinto. Quieres ejecutar una condición de lado servidor en código de lado cliente. Esto no puede hacerse sin meter entre medias un trasvase de información entre el servidor y el cliente. Tienes varias opciones:

    1) Si en el momento de servir la página al cliente ya sabes cuál es el valor que hay en el txtCodigo, puedes evaluar la condición y según su resultado, generar o no generar dentro del javascript la instrucción que presenta el popup.

    2) Si el textbox lo rellena el usuario y luego pulsa el botón, puedes habilitar que el botón realice el postback al servidor (que ahora lo tienes expresamente cancelado), y en el lado servidor evaluar la condición y según el resultado, devolver al cliente el comando de abrir el popup usando el tradicional Page.ClientScript.RegisterStartupScript.

    3) Si es imprescindible que el popup se presente sin realizar antes el postback, entonces tienes que tirar de AJAX. En el click del botón, realizas una llamada con $.ajax enviándole al servidor el valor del input. Esa llamada va a parar a una dirección del servidor en la que implementas un servicio que responda a la condición deseada. Y en el cliente, cuando llegue la respuesta, presentas al popup según el resultado de la misma.

    Como verás, en cualquiera de los tres casos, las cosas se complican en comparación con el código que tenías escrito. Esto es lo que pasa cuando quieres mezclar código servidor con código cliente.

    viernes, 17 de marzo de 2017 19:32

Todas las respuestas

  • La condicion la meterias alrededor de la parte en la que llamas al delete, es decir:

    $("[id*=btnDelete]").click(function () {
             if ($(this).attr("rel") != "delete") {
              if (poner_aqui_tu_condicion) {
                 $('#dialog').dialog('open');
              }
                 return false;
             } else {
                 __doPostBack(this.name, '');
             }
         });

    Ojo, fijate que he dejado el "return false" fuera del "if", con lo que se cancelara la ejecucion del "delete". Cuando dices que solo quieres que se ejecute cuando se cumpla una condicion, tienes que decidir que cosas quieres que se ejecuten, bien sea solo el dialogo (como en el ejemplo anterior), o bien sea el resto del codigo que se ejecutaba antes alrededor del dialogo, en cuyo caso tendras que alargar el alcance del "if".

    viernes, 17 de marzo de 2017 10:06
  • hola

    >>pero ahora necesito que se ejecute cuando se cumpla una condición en un If al presionar dicho botón.

    En el codigo que publicas puedo ver que has implementado varias condiciones, con lo cual definir un if en javascript conoces como hacerlo

    ahora bien, cual seria el problema que encuentras ? de que condicion se trata

    Veo que defines

    if ($(this).attr("rel") != "delete") {

    de dodne sale ese atributo "rel" que validas en el boton ?

    Estas seguro que el evento del boton se ejecuta? lo pregunto porque aqui

    $("[id*=btnDelete]").click(function () {

    estan faltando las commillas simples que define el nombre del boton

    $("[id*= 'btnDelete']").click(function () {

    ---

    Algo mas para remarcar, que devuelvas un false en el click no va a detener el post al servidor, debes definir un

    <asp:Button ID="btnDelete" runat="server" Text="Button" OnClientClick = "return false;"  ></asp:Button>

    para anular el evento

    es mas si la idea es trabjar con javascript porque no defines un <input type="button"> en lugar de udar uno de asp.net

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina



    viernes, 17 de marzo de 2017 10:51
  • Hola

    Mi situación es la sigiuente:

    Tengo un formulario donde muestro información filtrada por un codigo de libro, esto lo hago con un  DataSet, valído si el id_Libro está registrado y muestro la información, ahora busco hacer que cuando no esté registrado abrir el Pop-Up preguntando si quiere crearlo.


     Dim adp2 As New DS_ElementoTableAdapters.ELEMENTOTableAdapter
     Dim t As New DS_Elemento.ELEMENTODataTable
     t = adp2.Get_ID(txtCodigo.Text)
     If t.Rows.Count > 0 Then  

    Mostrar info de Libro                

    Else

    Abrir Pop-Up

    EndIf

    Gracias...


    Respuesta de foro Microsoft

    viernes, 17 de marzo de 2017 16:04
  • Ah, eso es muy distinto. Quieres ejecutar una condición de lado servidor en código de lado cliente. Esto no puede hacerse sin meter entre medias un trasvase de información entre el servidor y el cliente. Tienes varias opciones:

    1) Si en el momento de servir la página al cliente ya sabes cuál es el valor que hay en el txtCodigo, puedes evaluar la condición y según su resultado, generar o no generar dentro del javascript la instrucción que presenta el popup.

    2) Si el textbox lo rellena el usuario y luego pulsa el botón, puedes habilitar que el botón realice el postback al servidor (que ahora lo tienes expresamente cancelado), y en el lado servidor evaluar la condición y según el resultado, devolver al cliente el comando de abrir el popup usando el tradicional Page.ClientScript.RegisterStartupScript.

    3) Si es imprescindible que el popup se presente sin realizar antes el postback, entonces tienes que tirar de AJAX. En el click del botón, realizas una llamada con $.ajax enviándole al servidor el valor del input. Esa llamada va a parar a una dirección del servidor en la que implementas un servicio que responda a la condición deseada. Y en el cliente, cuando llegue la respuesta, presentas al popup según el resultado de la misma.

    Como verás, en cualquiera de los tres casos, las cosas se complican en comparación con el código que tenías escrito. Esto es lo que pasa cuando quieres mezclar código servidor con código cliente.

    viernes, 17 de marzo de 2017 19:32