سؤال

هذا منشور متكرر مع مزيد من المعلومات ...

أقوم بإنشاء مجموعة من العلامات ديناميكيًا ، وألحقها بـ A إلى معالج نقرة ...

$(document).ready(function(){
    // ... code to append <a> tags to nav div        
    $("#nav a").click(function(event){ 
       alert('Clicked '+event.target.id);
       return false;
    });
});

إذا كان لدي 10 علامات نتيجة لهذا النقر ونقر فوق أول واحد ، فستحصل على 10 (عشرة!) تنبيهات - لكنها جميعها تظهر معرف العلامة الذي نقرت عليه بالفعل.

(إذا قمت بالنقر فوق العلامة الخامسة ، نعم ، أحصل على 5 تنبيهات - كل ذلك مع معرف العلامة الخامسة ...)

ماذا يحدث هنا؟ هل لأنني قمت بإنشاء العلامات ديناميكيًا؟ هل هناك طريقة لتجنب ذلك؟

إليك الرمز الذي ينشئ العلامات A

$(document).ready(function(){
  $.get('_7day-M2.5.xml', {}, function(xml){
    $(xml).find('entry').each(function(i){
      $('#nav').append('<a href="#" id="'+i+'">'+$(this).find("title").text()+"</a><br/>");
    });
  });
});

لا يكشف إخراج Firebug شيئًا غريبًا.

أي فكرة عما يحدث هنا؟

شكرًا

هل كانت مفيدة؟

المحلول

حاول استخدام $ ("#nav> a") كمحدد بدلاً من $ ("#nav a"). إذا لم ينجح ذلك ، فما عليك سوى التأكد من ربط حدث النقر خارج أي حلقات قد تكون لديك. على سبيل المثال ، إذا كان لديك حدث Click Event الخاص بك داخل $ .each () الذي لديك عند إنشاء علامات المرساة ، فسيقوم بإنشاء أكثر من حدث نقرة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top