ورود

View Full Version : document.getElementById(ex).onclick =function()



ali865
یک شنبه 31 شهریور 1392, 22:36 عصر
for(var i=1; i<4; i++) {
var ex='div'+i;
document.getElementById(ex).onclick =function() {get_content_menu(ex);};



سلام
وقتی توی ie8 این کد رو اجرا میکنی به جای اینکه

document.getElementById('div1').onclick =function() {get_content_menu('div1');};
document.getElementById('div2').onclick =function() {get_content_menu('div2');};
document.getElementById('div3').onclick =function() {get_content_menu('div3');};






سه بار خط زیر اجرا میشه

document.getElementById('div3').onclick =function() {get_content_menu('div3');};


چرا اینطوری میشه؟چکارش کنم

jalil_gh
دوشنبه 01 مهر 1392, 08:43 صبح
این فقط به ie محدود نمیشه و تو همه مرورگرا اینطوریه. دلیلش هم اینه که وقتی شما رو یه div کلیک میکنید مقدار ex همیشه آخرین مقداری خواهد بود که داخل حلقه بهش داده شده.
برای حل این مشکل باید از closure استفاده کنید بدین صورت:
function get_content_menu(div) {
console.log(div);
}

for(var i=1; i<4; i++) {


(function() {

var ex = 'div' + i;
document.getElementById(ex).onclick = function() {
get_content_menu(ex);
};

})();
}

ali865
دوشنبه 01 مهر 1392, 19:54 عصر
مرسی دوست من ولی مشکل حل نشد.من زیا از جاوا اسکریپت سردر نمیارم ولی این کد رو زدم نتیجه ای بهم نداد بیشتر شبیه دیباگ کردن برنامم بودش .
ولی چه با console.log و چه بدون console.log توی ff و chrome درست کار میکنه ولی داخل ie نادرسته.من چکار کنم؟

Javidhb
سه شنبه 02 مهر 1392, 21:46 عصر
جواب مشکل شما رو نمیدونم اما یه پیشنهاد:

کد آقای jalil_gh (http://barnamenevis.org/member.php?282160-jalil_gh) درسته... اگه توی ie 8 کار نمیکنه:

بهترین راه حل استفاده از jquery 1.9 و class هست.

یه همچین چیزی:


<div id="div3" class="x"></div>

$('.x').on('click', function(){
var ex = $(this).attr('id');
get_content_menu(ex);
});