|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] переменные для events |
|
|
[решено] переменные для events
|
Пользователь Сообщения: 67 |
Профиль | Сайт | Отправить PM | Цитировать как передать функции javascript, которая цепляется на событие, переменные???
да еще, чтоб работало и под IE и под FF??? например мне надо на некий созданный мною объект повесить onmouseover я делаю так: document.getElementById('element_id').onmouseower = function(e) { //здесь e для того, чтоб в FF работало ... statement ... return false; }; я попробовал так: document.getElementById('element_id').onmouseower = function(v) { alert(v); // здесь v = myvar и, по сути я создаю функцию alert(myvar); ... statement ... return false; }(myvar); и на onmouseover ничего не происходит что делать??? |
|
Отправлено: 13:14, 15-09-2006 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать При обработке события в функцию-обработчик передается объект события, во втором примере Вашего кода он будет под переменной v. Т.е. Ваше предположение v=myvar неверно. А выполняется функция потому, что идет по сути ее вызов ввиду соблюдения синтаксиса "funcName(params)". То, что JS позволяет вам использовать определение тела функции и тут же ее вызов это его особенность, вот Вы ею и пользуйтесь. Правда это Вам вовсе не нужно, верно? Тогда помогут внешние переменные относительно контекста функции обработчика (частный случай - глобальные). Еще, на любителя, вариант - это обертка какой-то конечной функциональности в некий класс и назначение обработчиками методы этого класса, тогда приватные свойства класса могут решать поставленную Вами задачу - быть видимыми обработчику и невидимыми извне.
|
------- Отправлено: 10:11, 16-09-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 67
|
Профиль | Сайт | Отправить PM | Цитировать немного не въехал в написанное... это что же мне надо вызывать функцию примерно так??? (с глобальными переменными):
а как присваивать такой обработчик посредством javascript`a??? или туда eval надо делать??? а с eval`ом оно не выполнится??? использование классов мне также ничего не даст... ну создам я класс с нужными мне переменными... и что??? туда ведь тоже надо значения передавать где-то... зы использовать конструкцию в описанном примере я подсмотрел в набле куроводства там она работает - сам проверял |
Отправлено: 17:45, 18-09-2006 | #3 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать В какой именно набле? Можно ссылку?
1) Да, используйте глобальные переменные. 2) Код эквивалентен если в domymouseover будет выражение a='myval', за исключением области видимости переменной а. По сути этот код выполняет присваивание a='myval' каждый раз когда происходит событие и затем выполняет вызов функции domymouseover, т.о. если переменная нужна только для работы функции, то зачем засорять простраство глобальных переменных - выполняйте присваивание внутри domymouseover. 3) Присваивать обработчики событий можно (имхо, лучше) с помощью следующей функции (взятой там же, где и наблы): function addEvent(elt, name, handler, atEnd) { name = name.replace(/^(on)?/, 'on'); var prev = elt[name]; var tmp = '__tmp'; elt[name] = function(e) { if (!e) e = window.event; var result; if (!atEnd) { elt[tmp] = handler; result = elt[tmp](e); elt[tmp] = null; // delete() does not work in IE 5.0 (???!!!) if (result === false) return result; } if (prev) { elt[tmp] = prev; result = elt[tmp](e); elt[tmp] = null; } if (atEnd && result !== false) { elt[tmp] = handler; result = elt[tmp](e); elt[tmp] = null; } return result; } return handler; } addEvent(fields.login, 'onkeydown', function(e) { var keyStatus = th.keyFilter(e, loginFilter); if (keyStatus == ST_NOT_KEY) return false; if (keyStatus == ST_SYSTEM_KEY) return true; document.getElementById(loginImgId).src = imgDir+loginImgFocusedSrc; th.prevT = new Date(); th.onchangeControl(this, delay); return true; }) |
------- Отправлено: 10:08, 19-09-2006 | #4 |
Пользователь Сообщения: 67
|
Профиль | Сайт | Отправить PM | Цитировать все решилось гораздо проще, правда, как-то некрасиво:
eval('document.getElementById(\'element_id\').onmouseower = function(e) {'+ 'alert(\''+myvar+'\');'+ // здесь myvar из переменной становится константой для ЭТОЙ функции!!! ... statement ... 'return false;'+ '};'); Цитата 39-я набла Куроводства:
|
||
Отправлено: 11:40, 19-09-2006 | #5 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Цитата:
Так ведь проще: |
|
------- Отправлено: 14:23, 19-09-2006 | #6 |
Пользователь Сообщения: 67
|
Профиль | Сайт | Отправить PM | Цитировать может быть это я некорректно поставил задачу...
но этих myvar - множество что-то вроде: for (i = 0; i < myvar.length; i++) { if (document.getElementById('element_' + i)) eval('document.getElementById(\'element_' + i + '\').onmouseower = function(e) {'+ 'alert(\''+myvar[i]+'\');'+ // здесь myvar из переменной становится константой для ЭТОЙ функции!!! ... statement ... 'return false;'+ '};'); } тут другая проблема возникает: когда я создаю объект и прописываю ему event (не важно какой), то всё ок если же я создаю этот объект внутри другого объекта, то event не отвечает... в какую сторону копать??? |
Отправлено: 17:02, 19-09-2006 | #7 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать 1)
function createHandler(myvar_i) { return function(e) { alert('myvar_i=\''+myvar_i+'\' and e.type='+e.type); }; } var myvar = ['the 0', 'the 1', 'the 2', 'the 3']; for (i = 0; i < myvar.length; i++) addEvent(document.getElementById('link'+i), 'onmouseover', createHandler(myvar[i])); 2) Приведите проблемный код, я не догоняю, видимо конец рабочего дня сказывается. |
------- Отправлено: 19:12, 19-09-2006 | #8 |
Пользователь Сообщения: 67
|
Профиль | Сайт | Отправить PM | Цитировать решение оказалось неожиданно простым!!!
использование функции addEvent поначалу оказалось безрезультатным. надо было лишь отказаться от innerHTML!!! в пользу elt.appendChild(document.createTextNode(text)) всё замечательно, только вот как теперь сделать так, чтобы текст с имеющимися тэгами был именно в виде HTML, т.е. без преобразования html символов в их сущности??? |
Отправлено: 10:12, 20-09-2006 | #9 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать VeshchiyOleg, я буду пытаться помочь Вам, если Вы будете вводить меня в курс проблемы, мой навык телепатии на зачаточном уровне. А то Вы прыгаете на одних понятных Вам вещах, а вопросы задаете мне... в частности.
|
------- Отправлено: 12:30, 20-09-2006 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Переменные для Windows 7 x64 и x86 | Bodia1 | Автоматическая установка приложений | 2 | 07-02-2018 20:18 | |
[решено] Глобальные переменные (?) | Frost_Imp | AutoIt | 8 | 29-07-2009 15:12 | |
[решено] Пропадают переменные из форм | Bask76 | Вебмастеру | 5 | 26-07-2008 22:02 | |
[решено] глобальные переменные в php | bruder | Вебмастеру | 17 | 19-04-2008 21:45 | |
Delphi - Переменные в типах в DelphiX для Delphi 7 | Poma | Программирование и базы данных | 5 | 23-06-2004 16:52 |
|