Mi jquery es el siguiente:

function confirmRxAction(tNum) {
  var aUrl = "";
  alert(tNum);
  if (confirm("Are you sure you want to close?")) {
    aUrl = "${pageContext.request.contextPath}/tax/executeoneTimeEx.html?tNum=" + tNum;
    $("#aRx").click();
  }

  $(document).ready(function() {
    $("#aRx").click(function() {

      xhr = $.ajax({
        type: "POST",
        url: aUrl,
        dataType: "text",
        error: function(XMLHttpRequest, errorThrown) {},
        success: function(ajaxResult, testStatus) {

          if (ajaxResult.length > 0)
            alert(ajaxResult);
          else
            afterUpdate();

        }
      });

      return false;
    });
  });
}

Cuando se hace clic en el hipervínculo, se llama a la función y aparece este mensaje de confirmación con sí o no. Cuando selecciono sí por primera vez, el control no pasa al controlador. La ventana emergente de confirmación se cierra pero no se toman medidas. Así que hago clic en el hipervínculo por segunda vez y todo funciona bien. ¿Qué hay de malo que impide que se invoque la acción con el primer clic?

-1
JNPW 16 feb. 2017 a las 18:09

3 respuestas

La mejor respuesta

Su función $ (document) .ready está dentro de su función de confirmación, por lo que el evento click no se adjunta hasta que la función de confirmación se ejecute por primera vez. Intente mover la función $ (document) .ready fuera de la función de confirmación.

2
Zackary Murphy 16 feb. 2017 a las 15:16

Sugeriría configurar el clic en el documento listo en su lugar. Y agregue la confirmación en el clic () como en el ejemplo de fragmento.

function afterUpdate() {
  alert("after update");
}

$(document).ready(function() {
  $("#aRx").click(function(event) {
    event.preventDefault();
    if (confirm("Are you sure you want to close?")) {
      
      xhr = $.ajax({
        type: "GET",
        url: "http://services.groupkt.com/country/get/all",
        dataType: "json",
        error: function(XMLHttpRequest, errorThrown) {
          alert("error" + errorThrown);
        },
        success: function(data) {
              if (data != null)
                alert(data);
              else
                afterUpdate();
        }
      });
    }
    return false;
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<a id="aRx" href="#">Click Here</a>
0
shokulei 16 feb. 2017 a las 21:58

No sé por qué escribiste tu código de esta manera, pero debes usarlo como a continuación ::

function confirmRxAction(tNum){
    var aUrl = "";
    alert(tNum);
    if(confirm("Are you sure you want to close?")) {
            aUrl = "${pageContext.request.contextPath}/tax/executeoneTimeEx.html?tNum=" + tNum;
            xhr = $.ajax({type: "POST", 
                url: aUrl,  
                dataType: "text",
                error: function(XMLHttpRequest, errorThrown){                              
                }, 
                success: function(ajaxResult, testStatus){

                    if(ajaxResult.length>0)
                        alert(ajaxResult);
                    else
                        afterUpdate();

                }
            });
        }
}

Simplemente reemplace su función con mi función.

0
Rana Ghosh 16 feb. 2017 a las 15:16