سؤال

أحاول أن أحسب كمية المرات التي تم فيها النقر على المعرف. على سبيل المثال ، إذا تم النقر على #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;
  });
هل كانت مفيدة؟

المحلول

يمكنك استخدام .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