Массив переписывает значение
var i; var j; var strCit = new Array() window.onload = function() { var imgCit = new Array() for(i=0; i < 100; i++) { imgCit[i] = document.getElementById("imgCit"+i); if (imgCit[i]) { imgCit[i].onclick = bbcode; j=i; } } } function bbcode() { alert(j); } В html существуют, на данный момент 5 элементов с id=imgCit64, id=imgCit65, id=imgCit67, id=imgCit68, id=imgCit69. Мне нужно, чтобы при клике на соответствующий элемент выходило соответствующее число (если например, кликну на элемент с id=imgCit67, то alert выводил число 67). Проблема в том, что выводится наибольшее существующее i, то есть в данном примере 69. Как это исправить? |
Например, так (коряво):
в 12-й строке bbcode замените на function(){ alert( this.id.replace('imgCit','')*1 ); } Переменную j и функцию bbcode можно удалить. Или так, чтобы не перебирать несуществующие картинки window.onload = function() { var img = document.getElementsByTagName('img'), i = 0; while (img[i]) { if ( /^imgCit(\d+)$/.test(img[i].id) ) { img[i].onclick = function(){ alert( this.id.replace('imgCit','')*1 ); }; } i++; } } |
var strCit = [] ; window.onload = function() { var imgCit = [] ; for(var i=0; i <100; i++) { imgCit[i] = document.getElementById("imgCit" + i) ; if(imgCit[i]) { imgCit[i].onclick = (function(j) { return function() { bbcode(j) ; } })(i) ; } ; } ; } function bbcode(j) { alert(j) ; } |
Ну а нормальные люди это делают примерно так:
<script> window.addEventListener('click', function(e){ if( e = /^imgCit(\d+)$/.exec( e.target.id ) ){ alert( e[1] ) } },false) </script> <img id="imgCit68" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/> |
Aetae,
В IE 8 не пашет) |
Цитата:
Очевидно, что никто каждый раз не пишет проверку на браузер. У всех есть либо своя мини-либа для работы с событиями, либо чужая мега-либа, либо по-харадкору добавлена своя реализация addEventListener для ie. |
Цитата:
в частности Пример ошибочного использования Вариант решения ... <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <script> var i; //var j; var strCit = new Array() window.onload = function() { var imgCit = new Array() for(i=0; i < 100; i++) { imgCit[i] = document.getElementById("imgCit"+i); if (imgCit[i]) { imgCit[i].onclick = bbcode(i); //j=i; } } } function bbcode(i) { return function () { alert(i); } } </script> </head> <body> <img id="imgCit64" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/> <img id="imgCit65" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/> <img id="imgCit67" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/> <img id="imgCit68" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/> <img id="imgCit69" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/> </body> </html> |
Часовой пояс GMT +3, время: 04:50. |