|
|
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
Есть такая проблема, вот упрощенный пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Алерт все время выводит последнее значение i. Я плохо знаю javascript, как можно сделать это правильно? Пад'ехалi, лазер уключылi, i кабздец! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 20:29:57 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 20:36:04 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
Спасибо! Пад'ехалi, лазер уключылi, i кабздец! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2010, 20:52:34 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
H.A.M., Вы попались на closure, то есть на незнании внутреннего устройства javascript У вас в функции переменная i захватывалась каждым обработчиком события. Поэтому то и произошла такая штука - все кнопки ссылаись на одну и ту же переменную цикла, которая в конце равна items.length ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 16:02:49 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
Угу. Вот понятная конструкция: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 18:50:39 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
IDVsbruck, Код: plaintext вот здесь i - это будет параметр функции-замыкания или переменная из цикла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 19:07:47 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
Конечно, функции. Внутри функции переменная цикла не видна ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 19:15:45 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
IDVsbruckКонечно, функции. Внутри функции переменная цикла не видна ...Тогда это будет объект события (в случае Gecko) или нулл (в случае поделки) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2010, 19:19:29 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
Яростный МечТогда это будет объект события однозначно. Уже само onclick = function(i) говорит, что i будет мышекликом. А уберем (i) - получим извечное items.length. Сама тоже не люблю эти навороченные обертки с return'ами функций от текущих значений i, но все равно использую их, а не дополнительные атрибуты типа items[i].i_value. Кстати, в твоем примере по идее было бы достаточно alert('You clicked item #' + this.i_value) вместо e = e||window.event и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2010, 02:51:50 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
Блин, действительно лопухнулся ... не каждый день делаю, поторопился ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2010, 03:00:22 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
illionКстати, в твоем примере по идее было бы достаточно alert('You clicked item #' + this.i_value) вместо e = e||window.event и т.д. Это workaround для какой-то версии IE, если не ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2010, 04:26:35 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
an0nym, this вроде даже в ИЕ еще не отменяли :-). Но на шестом проверить не мешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2010, 05:37:49 |
|
||
|
Javascript: Передача параметров в функцию
|
|||
|---|---|---|---|
|
#18+
illion, The value of this within the handler It is often desirable to reference the element from which the event handler was fired, such as when using a generic handler for a series of similar elements. When attaching a function using addEventListener() the value of this is changed—note that the value of this is passed to a function from the caller. In the example above, the value of this within modifyText() when called from the click event is a reference to the table 't'. This is in contrast to the behavior that occurs if the handler is added in the HTML source: view plainprint? <table id="t" onclick="modifyText();"> . . . The value of this within modifyText() when called from the onclick event will be a reference to the global (window) object. Internet Explorer In IE you have to use attachEvent rather than the standard addEventListener. To support IE, the example above can be modified to: view plainprint? if (el.addEventListener){ el.addEventListener('click', modifyText, false); } else if (el.attachEvent){ el.attachEvent('onclick', modifyText); } There is a drawback to attachEvent, the value of this will be a reference to the window object instead of the element on which it was fired. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2010, 07:48:38 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=36551546&tid=1453299]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
188ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 191ms |
| total: | 479ms |

| 0 / 0 |
