jQuery Bind Unfind Click Event
-
28-09-2019 - |
سؤال
أحاول أن أحسب كمية المرات التي تم فيها النقر على المعرف. على سبيل المثال ، إذا تم النقر على #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
إذا تمكنت من منحهم كل فصل ، فسيظل هذا أعلاه يعمل ويكون من الأسهل في الحفاظ عليها.