Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.05.2013, 21:36
Интересующийся
Отправить личное сообщение для DmitriSpartak Посмотреть профиль Найти все сообщения от DmitriSpartak
 
Регистрация: 05.05.2013
Сообщений: 12

Массив переписывает значение
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. Как это исправить?
Ответить с цитированием
  #2 (permalink)  
Старый 05.05.2013, 23:34
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Например, так (коряво):

в 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++;
    }
}

Последний раз редактировалось Demath, 06.05.2013 в 14:40. Причина: Опечатка
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2013, 01:01
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

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) ;
}
__________________
★ ²º¹³ ☆

Последний раз редактировалось Hekumok, 06.05.2013 в 01:05.
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2013, 01:26
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Ну а нормальные люди это делают примерно так:
<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"/>
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2013, 02:47
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Aetae,

В IE 8 не пашет)
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2013, 03:29
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Сообщение от Demath Посмотреть сообщение
Aetae,

В IE 8 не пашет)
Когда я пишу addEventListener - я подразумеваю навешивание обработчика. Костыли для осла пускай используют свои.

Очевидно, что никто каждый раз не пишет проверку на браузер. У всех есть либо своя мини-либа для работы с событиями, либо чужая мега-либа, либо по-харадкору добавлена своя реализация addEventListener для ie.
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2013, 08:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от DmitriSpartak
Проблема в том, что выводится наибольшее существующее i, то есть в данном примере 69. Как это исправить?
прочесть статью про Замыкания
в частности
Пример ошибочного использования

Вариант решения ...
<!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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В contains() не подставляется значение переменной Heger jQuery 2 11.12.2011 20:26
Значение переменной salex009 jQuery 1 05.12.2011 16:55
как загрузить массив из файла satyr22 Internet Explorer 4 21.08.2011 21:04
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30