我正在尝试jQuery来计算单击ID的次数。例如,如果单击一次#kwick_1,我希望它加载视频“ else”什么都不做。

我正在考虑在整个功能中应用此功能,因此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;
  });
有帮助吗?

解决方案

您可以使用 .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; });

其余的只是优化并削减重复代码,但想法是绑定只有一旦使用的零件才能发生 .one(), ,然后该处理程序在第一次执行后将自身卸下。然后我们将 return false 使用 .click() 因为那应该 总是 发生。确保这是绑定的 像上面的示例一样,由于事件处理程序的运行顺序是绑定的。

您也可以更换您的 #kwick_1, #kwick_2.... 选择器 .kwick 如果您可以给他们所有课程,上面的这将仍然有效,并且更容易维护。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top