Javascript 加载页面时,document.on单击会自动激发

Javascript 加载页面时,document.on单击会自动激发,javascript,jquery,Javascript,Jquery,当我加载页面时,document.on('click',…)请求会立即发送,而不管条件如何 例如: $(document).ready(function(){ var poll = new Poll(); if($('.loadPoll')[0]){ //this works fine poll.loadPoll(function(){ console.log("loaded poll successful"); }); } $(docume

当我加载页面时,
document.on('click',…)
请求会立即发送,而不管条件如何

例如:

$(document).ready(function(){
  var poll = new Poll();

  if($('.loadPoll')[0]){ //this works fine
    poll.loadPoll(function(){
        console.log("loaded poll successful");

    });
  } 

 $(document).on('click', '#SubmitVote', poll.afterSubmit(function(){
        console.log("Poll has been voted on!");
    })); //this gets sent regardless of clicks


});
即使没有ID为
submitnote
的元素,它也会自动发送

编辑:

改为:

 $(document).ready(function(){
   var poll = new Poll();

    if($('.loadPoll')[0]){
      poll.loadPoll(function(){
        console.log("loaded poll successful");

     });
    }
    $(document).on('click', 'button.SubmitVote', function(){
        poll.afterSubmit(function(){
            console.log("Poll has been voted on!");
            });
        });
}

Felix Kling在他/她的评论中正确地识别了这个问题,但我将进一步展开—您的代码正在执行一个函数(
poll.afterSubmit
),并将该函数调用的结果指定为单击处理程序。除非该函数返回函数,否则这可能不是您想要的

$(document).on('click', '#SubmitVote', function(){
    console.log("Poll has been voted on!");
});

上面去掉了poll.afterSubmit()调用,只分配处理函数。这可能足以满足您的需要,也可能不足以满足您的需要,您的问题并不清楚您正试图使用
poll.afterSubmit

poll.afterSubmit(function(){…})
立即执行
afterSubmit
,返回值将设置为事件处理程序。这可能不是你想要的,但这取决于
afterSubmit
的功能。谢谢你,菲利克斯。如果你这样回答,我可以接受。