js засада какая то

12 3
V
На сайте с 06.11.2008
Offline
18
777

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

document.getElementById('menuH'+i).onmouseover = function() {menuHDop('menuHD'+i)};

}

данная конструкция присваивает (например 'menuH1.onmouseover' и всем остальным) function() {menuHDop('menuHD'+i)}

конечно мне надо чтобы вместо 'i' была цыфра

если сделать так

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

document.getElementById('menuH'+i).onmouseover = function(k) { return menuHDop('menuHD'+k)}(i);

то естественно начинает выполнятся функция menuHDop и возвращается её результат чего мне не надо.

как быть?

[Удален]
#1
vccv:
то естественно начинает выполнятся функция menuHDop и возвращается её результат чего мне не надо.
как быть?

читать про замыкания и контексты выполнения функций в js :)


<script>
for (var i=1;i<30;i++) {
var k = i;
document.getElementById('menuH'+i).onmouseover = function() {menuHDop('menuHD'+k)};
}
</script>
V
На сайте с 06.11.2008
Offline
18
#2

получается тоже самое function() {menuHDop('menuHD'+k)

или подругому у всех

function() {menuHDop('menuHD30)}

vccv добавил 24.01.2010 в 02:07

вернее почти тоже самое в случае 'i' получается

function() {menuHDop('menuHD31)}

[Удален]
#3
vccv:
получается тоже самое function() {menuHDop('menuHD'+k)
bearman:
читать про замыкания и контексты выполнения функций в js

и не пытаться думать не зная теории.

V
На сайте с 06.11.2008
Offline
18
#4

ура нашел решение

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

function(i) {

document.getElementById('menuH'+i).onmouseover = function() {menuHDop('menuHD'+i)};

}(i);

}

[Удален]
#5
vccv:
ура нашел решение

это из той же серии что и мое, только мое проще)

мое попробуйте ради интереса, будет ли работать ? ;)

V
На сайте с 06.11.2008
Offline
18
#6

неработает

vccv добавил 24.01.2010 в 02:18

сорри) , работает. просто я тут не всю конструкцию вылажил (она немного подлиннее) и не все 'i'-ки поменял.

хотя, секундочку

всетаки не работает твоя конструкция bearman, 'k' как и 'i' у всех только меньше на еденицу

[Удален]
#7
vccv:
неработает

да, вы правы. видимо мое местное время сказывается но мозге :)


window.onload = function () {
for(var i = 1; i<=30; i++)
{
(function () {
var k = i;
document.getElementById('test'+k).onmouseover = function () {
alert(k);
};
})();
}
};

вот такой вариант точно работает :) основан на том же)

V
На сайте с 06.11.2008
Offline
18
#8

спасибо bearman, пойду дальше уменьшать код и нагружать браузер пользователя

[Удален]
#9
vccv:
спасибо bearman, пойду дальше уменьшать код и нагружать браузер пользователя

в смысле?

for (var i=1;i<30;i++) {
function(i) {
document.getElementById('menuH'+i).onmouseover = function() {menuHDop('menuHD'+i)};
}(i);
}

будто вы тут не создаете функцию )))))))))

bearman добавил 24.01.2010 в 02:36

а вообще - топик добра :)

V
На сайте с 06.11.2008
Offline
18
#10

за то что я не одинок,

хотя наверное у Вас это работа, прошу прощения если не прав.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий