سؤال
هذا منشور متكرر مع مزيد من المعلومات ...
أقوم بإنشاء مجموعة من العلامات ديناميكيًا ، وألحقها بـ 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 () الذي لديك عند إنشاء علامات المرساة ، فسيقوم بإنشاء أكثر من حدث نقرة واحدة.