试图调用一个从javascript函数中单击隐藏按钮的函数

时间:2017-04-19 08:59:22

标签: javascript jquery html

我在jquery中编写了一个隐藏按钮的代码,同时在调用代码块的功能时单击按钮。这是代码的片段

var successBtn = $("#sucessBtn"); //declare the button
function successConfirm(){

    // Hide the button
    successBtn.hide();

    successBtn.on("click", function() {
        alert("in onclick");
        successBtn.click();
    });
}

我试图在javascript块中调用该函数,如图所示

onClose: function(){
          successConfirm();
          alert('window closed');
      }

执行块中的警报,但动态点击对接的警报永远不会被执行。请问有什么不对

4 个答案:

答案 0 :(得分:1)

successConfirm挂钩事件处理程序,它实际上没有点击按钮。它还通过触发点击来设置无限循环,以响应点击,这将是不好的。

如果您希望它单击该按钮,请让它执行此操作而不是(或除此之外)连接事件处理程序:

function successConfirm(){

    // Hide the button
    successBtn.hide();

    successBtn.on("click", function() {
        alert("in onclick");
    });

    successBtn.click(); // <=== Moved this
}

请注意,上面每次都会添加一个新的点击处理程序。您可能希望将这两项内容分开,可能会在设置代码中的某处将on调用放在 successConfirm之外。

在评论中你说过:

  

我已移动它但未点击按钮

这向我建议,当您执行var successBtn = $("#sucessBtn");时按钮不存在。也许你太早做了这件事。事先没有特别好的理由,只需在successConfirm中执行此操作:

function successConfirm(){
    $("#successBtn")
        .hide()
        .on("click", function() {
            alert("in onclick");
        })
        .click();
}

答案 1 :(得分:0)

在你的代码中,你触发了onClick事件中的点击...所以点击等待点击(你得到我......)

你能做的是:

successBtn.on("click", function() {
    alert("in onclick");
});
 successBtn.click();

答案 2 :(得分:0)

.trigger()的调用会以与用户自然触发事件时相同的顺序执行处理程序:

successBtn.trigger('click');

successBtn.on("click", function() {
    alert("in onclick");
});

答案 3 :(得分:0)

<强>问题:

你在这里做了一个烂摊子,在这个代码中附加点击事件时触发了点击事件:

successBtn.on("click", function() {
    alert("in onclick");
    successBtn.click(); //This is misplaced here
});

为什么要将click事件附加到按钮上,successConfirm函数内部,最好放在它之外。

<强>解决方案:

我已更新您的代码,因此现在有意义了:

var successBtn = $("#sucessBtn"); //declare the button

//Attach the click event 
successBtn.on("click", function() {
  alert("in onclick");
});


function successConfirm() {

  // Hide the button
  successBtn.hide();

  //click the button
  successBtn.click();
}

注意:

您最好在successBtn.hide();功能之外移动successConfirm隐藏初始按钮,这样就可以在调用successConfirm()之前隐藏它。