三重触发链接上的点击事件

时间:2018-06-08 12:52:20

标签: javascript jquery

这是我的代码的一部分

$('.profile-survey-link').on("click",function(e){
    e.preventDefault();
    var clickado = $(this);
    var options = {
        endpoint: 'usuario/completado',
        method: 'get',
        data: {},
        success: function(response){
            if(response == "100.00"){
                 clickado.click();
                 console.log('completo');
            }
            else{
                 console.log('no completo');
            }
        },
        error: function(){
            console.log('error');
        },
        complete: null,
    };
    Ajax.request(options);
});

ajax调用正在运行,因为显示了日志,但未触发click事件。

3 个答案:

答案 0 :(得分:1)

而不是使用this传递ID或正确的对象,如:

$( "#foo" ).trigger( "click" );

答案 1 :(得分:1)

您需要在ajax调用之外的变量中引用this,以便您可以使用此变量触发与this范围相关的点击。如下所示:

var _this = this;
$.ajax({
   success: function(response){
  if(response == "100.00"){
     $(_this).trigger('click');
     console.log('completo');
   }
   else{
      console.log('no completo');
   }

});

答案 2 :(得分:0)

在JavaScript中,this指向当前函数。 jQuery需要一个元素,因此$(this)无效。

我假设您正试图点击按钮,对吧?在这种情况下,有两种解决方案:

解决方案1 ​​

这样可行,但不要使用它。

为您的按钮添加ID并转而参考。所以你可以:

<button id="myButton">Click here</button>

$('#myButton').trigger('click');

解决方案2

调用您在按钮的onclicksuccess处理程序之间共享的功能。例如:

<button id="myButton" onclick="buttonClick()">Click here</button>

将其添加为buttonClick:

function buttonClick() {
  doSomething();
}

然后,将您的$(this).trigger('click')替换为:

doSomething();

我说你不​​应该使用解决方案1有几个原因:

  1. 在大多数情况下,您并不真正对click事件本身感兴趣,而是对它执行的代码感兴趣。
  2. 通过触发点击事件,您无法明确自己的意图。解决方案2允许您调用正确命名的函数,例如doCalculationstoreInfonavigateTo或任何适用的函数。这样可以在几个月后更容易理解代码。
  3. 当有人(甚至是你)更改按钮点击的内容时,一年后会发生什么?然后在两个地方自动发生,无论是否适当。它可能导致微妙的错误。