JS:无法动态绑定事件

时间:2013-04-13 09:39:24

标签: jquery

我在我的网站voting mechanism,如果用户尝试vote(up or down)我会检查他是否登录,因为我已经编写了以下代码,

      $(".vote").click(function(){
         if(is_logged_in)
          {
             // Doing necessary stuff for vote up/down
          }else
            {
             // Showing Login Dialog box                        
            submitForm(".lform",function(response){

             if(data.status == "1")
               {
                 //Closing the Login Dialog Box
                 is_logged_in = 1;  // Assigning the value
                 bindEvent(".vote","click");  // Binding the Event,but can't able to it
               }
              });//Form Submission Closed
            }// Else Closed
         });// Main 'click' closed

     function bindEvent(selector,eventType){
         $(selector).bind(eventType);
        }

而不是外部函数bindEvent(".vote","click")我尝试过没有bindEvent(),但我无法在成功登录后动态绑定click event

2 个答案:

答案 0 :(得分:1)

您应该使用on()来绑定动态创建的元素。

 $(document).on("click", ".vote",function(){
      if(is_logged_in)
      {
         // Doing necessary stuff for vote up/down
      }
      else
      {
         // Showing Login Dialog box                        
        submitForm(".lform",function(response){

         if(data.status == "1")
           {
             //Closing the Login Dialog Box
             is_logged_in = 1;  // Assigning the value
             bindEvent(".vote","click");  // Binding the Event,but can't able to it
           }
          });//Form Submission Closed
        }// Else Closed
});// Main 'click' closed

答案 1 :(得分:1)

为了绑定事件上发生的事情,您需要传递一个回调,以便在该事件发生时触发。在上面的代码中,您没有指定回调。

function bindEvent(selector,eventType){
  $(selector).bind(eventType);
}

你需要这样的东西:

function bindEvent(selector,eventType,callBack){
  $(selector).bind(eventType, callBack);
}

您将使用它:

bindEvent('.target', 'click', function(){
  alert('This will trigger on click!');
})

更新

在重新阅读您的代码后,我认为您实际需要的是触发 click事件,而不是将其绑定到它:

$(".vote").click(function(){
  var $vote = $(this);
  if(is_logged_in) {
    // Doing necessary stuff for vote up/down
  }
  else {
    // Showing Login Dialog box                        
    submitForm(".lform",function(response){
      if(data.status == "1"){
        //Closing the Login Dialog Box
        is_logged_in = 1;  // Assigning the value
        $vote.click();
      }
    });//Form Submission Closed
  }// Else Closed
});

使用click()是一种简单的方法,或者您可以使用jQuery的.trigger('click')方法。您可能还希望避免点击事件冒泡到父元素,这在这种情况下是有意义的,因此您也可以使用.triggerHandler('click')