1

我正在尝试使用 jQuery 来计算一个 ID 被点击的次数。例如,如果单击#kwick_1 一次,我希望它加载视频“否则”什么也不做。

我正在考虑在整个函数中应用它,所以对于 2、3、4 等也是如此。

我将如何实现这一目标?

var timesClicked = 0;
  $('#kwick_1, #kwick_2, #kwick_3, #kwick_4, #kwick_5, #kwick_6, #kwick_7').bind('click', function(event){
   var video = $(this).find('a').attr('href'); /* bunny.mp4 */

   var clickedID = $(this).attr('id'); /* kwick_1 */
   var vid = 'vid';
   timesClicked++;

   $(this).removeAttr('id').removeAttr('class').attr('id',clickedID + vid).attr('class',clickedID + vid);
   if(timesClicked == 1) {

    $.get("video.php", { video: video, poster: 'bunny.jpg', }, function(data){
     $('.'+clickedID+vid).html(data);
    }); 

   } else {
    /* Do nothing for now */
   }
   return false;
  });
4

1 回答 1

4

您可以使用它.one()来更轻松地执行此操作,如下所示:

$('#kwick_1, #kwick_2, #kwick_3, #kwick_4, #kwick_5, #kwick_6, #kwick_7').one('click', function(event){
  var video = $(this).find('a').attr('href'), clicked = this.id + 'vid';

  $(this).attr({ id: clicked, 'class': clicked });
  $.get("video.php", { video: video, poster: 'bunny.jpg', }, function(data){
    $('.'+clicked).html(data);
  }); 
}).click(function() { return false; });

剩下的只是优化和减少重复代码,但想法是绑定你只想发生一次的部分 using .one(),然后该处理程序将在第一次执行后自行删除。然后我们绑定return false使用.click(),因为那应该总是发生。确保它像上面的示例一样被绑定因为事件处理程序按照它们被绑定的顺序运行。

如果你能给他们一个类,你也可以替换你的#kwick_1, #kwick_2....选择器,上面的这个仍然可以工作并且更容易维护。.kwick

于 2010-10-08T09:22:53.413 回答