Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   перебор id циклом (https://javascript.ru/forum/dom-window/15060-perebor-id-ciklom.html)

Variable 11.02.2011 17:32

перебор id циклом
 
Возникает проблема, когда я циклом хочу перебрать все ид и присвоить им при клике только 1 функцию(по клику внутрь блока ставится картинка), но таким методом не работает
for (i=1;i<=18;i++) {
    $('id'+i).click( function () {
        $('id'+i).html('<img src="cross.png">')
    })
}

Kolyaj 11.02.2011 17:54

http://javascript.ru/basic/closure#p...-ispolzovaniya

Aetae 11.02.2011 18:06

Вообще в данном случае юзать this проще.

Variable 12.02.2011 09:14

а сейчас что не так?
block = $('div[id^=id]')
function crossover(divs) {
	    for(var i=0; i<divs.length; i++) {  
	        divs[i].onclick = function() {
	            return function() { divs[i].innerHTML('<img src="cross.png">') }
	        }
	    }
	}

Kolyaj 12.02.2011 09:27

А вы статью прочитали?

Variable 12.02.2011 15:34

Да, и насколько я понял, чтобы функция сохранялась для каждого элемента, она должна состоять внутри другой, или нет? я взял из примера код

monolithed 12.02.2011 18:28

Цитата:

Сообщение от Variable
Да, и насколько я понял, чтобы функция сохранялась для каждого элемента, она должна состоять внутри другой, или нет?

не правильно трактуете смысл, вам нужно создать замыкание, а вообще:
Цитата:

Сообщение от Aetae
Вообще в данном случае юзать this проще.

На вскидку:
<script type="text/javascript">
window.onload = function() {
    var fragment = document.createDocumentFragment(),  i = 10;
    
    while(i--) {
        div = document.createElement('div');
        div.innerHTML = 'click';
        
        div.onclick = (function(i) {
            return function() {
                this.innerHTML = i;
            }
        })(i);
        fragment.appendChild(div);
    }
    document.body.appendChild(fragment);
};
</script>


Часовой пояс GMT +3, время: 02:23.