Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> event передать через функцию 
V
    Опции темы
bars80080
Дата 13.11.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



что-то не получается передать event в ФФ

весь процесс выглядит так:
ищу нужные элементы, назначаю им обработчики на разные события. в некоторых случаях надо получить координаты мыши

Код

    for(var i = 0; i < ell; i++) {
        if(el[i].className != 'ihint') { continue; }
        el[i].onmouseover = function() { ihint_over(this); };
        el[i].onmousemove = function() { ihint_move(event); };
        el[i].onmouseout = function() { ihint_out(this); };
    }

во-первых, уже здесь не получается отдать event в функцию ihint_move

во-вторых, даже если просто прописать в тэге <img onmousemove="func1(event);" />,
то не получается передать событие в следующую функцию:

Код

function func1(e) {
    func2(e);
}
в func2() события ФФ тоже не видит

Это сообщение отредактировал(а) bars80080 - 13.11.2009, 15:05
PM MAIL WWW   Вверх
Amphiluke
Дата 13.11.2009, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Видимо, не стóит так определять слушателей событий. Пользуйтесь стандартными методами DOM (AddEventListener), они точно не подведут.

PM   Вверх
bars80080
Дата 13.11.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



Цитата(Amphiluke @  13.11.2009,  18:31 Найти цитируемый пост)
Пользуйтесь стандартными методами DOM (AddEventListener),

что сие подразумевает?

Добавлено через 3 минуты и 18 секунд
это?

Код

    for(var i = 0; i < ell; i++) {
        if(el[i].className != 'ihint') { continue; }
        el[i].onmouseover = function() { ihint_over(this); };
        el[i].addEventListener('mousemove', 'ihint_move', false);
        el[i].onmouseout = function() { ihint_out(this); };
    }


а где ж тут event? или он дефолтно встроен?
PM MAIL WWW   Вверх
Amphiluke
Дата 13.11.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Да, он передается неявно. Но функция должна принимать соответствующий параметр.

Код

function ihint_move(evnt) {
   // ...
}

if (el[i].addEventListener) {
   el[i].addEventListener("mousemove", ihint_move, false);
} else {
   el[i].attachEvent("onmousemove", ihint_move);
}


Это сообщение отредактировал(а) Amphiluke - 13.11.2009, 20:14
PM   Вверх
youri
Дата 14.11.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 2
Всего: 16



bars80080, ie хранит этот объект в window, т.е. можно просто писать event
ff передает его через первый параметр
кроссбраузерно получить его можно так
Код

function f( e ) {

    e = e || event;
    ...
}

в html, если очень хочеться, можно сделать так
Код

... onclick="f( argoments[0] || event );" ...

PM   Вверх
bars80080
Дата 14.11.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



youri, я это знаю. я говорю о передаче event через две функции


собсна, я сейчас ничего попробовать не могу. в понедельник буду пытать
PM MAIL WWW   Вверх
youri
Дата 16.11.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 2
Всего: 16



значит знаешь, но не понимаешь (;
Цитата(bars80080 @  13.11.2009,  15:04 Найти цитируемый пост)
        el[i].onmousemove = function() { ihint_move(event); };

Цитата(bars80080 @  13.11.2009,  15:04 Найти цитируемый пост)
во-вторых, даже если просто прописать в тэге <img onmousemove="func1(event);" />,

где ты тут передаешь первый параметр обработчика события? В обоих случаях ты передаешь window.event
PM   Вверх
bars80080
Дата 16.11.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



ну, что-то я не догоняю, это стопудово. 

вот сейчас работает так:
Код

<html>
<body>
<style>
#a2 { width: 400px; height: 300px; background: #eeeeee; }
</style>
<script>
var IE = false, IE6 = false, IE7 = false;
if(window.ActiveXObject) {
    IE = true;
    var uaVers = window.navigator.userAgent.substr(window.navigator.userAgent.indexOf('MSIE') + 5, 3);
    if(uaVers.slice(0, 1) == 6) { IE6 = true; }
    else { IE7 = true; }
}
window.onload = function() { set1(); };
function set1() {
    var el = document.getElementById('a2');
    if(el.addEventListener) {
        el.addEventListener("mousemove", hand2, false);
    } else {
        el.attachEvent("onmousemove", hand2);
    }
}
function hand2(e) {
    var bk = document.getElementById('a1');
    bk.innerHTML = xmouse(e);
}
function xmouse(e) { if(IE) { return event.clientX; } else { return e.pageX; }}
</script>
<span id="a1"></span>
<br />
<div id="a2"></div>
</body></html>


вопрос теперь такой. как мне назначить this в функцию?
то есть, здесь один див, но в оригинали их несколько. операцию нужно будет совершать с ними и для этого подходило
<div onmousemove="hand2(event, this);">

но как это сделать с назначаемым обработчиком?
Код

function set1() {
    var el = document.getElementById('a2');
    if(el.addEventListener) {
        el.addEventListener("mousemove", hand2, false, this);
    } else {
        el.attachEvent("onmousemove", hand2, this);
    }
}
function hand2(e, x) {
    x.innerHTML = xmouse(e);
}
понятное дело не работает
PM MAIL WWW   Вверх
Itsys
Дата 16.11.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 12
Всего: 34



Можно так:
Код

<html>
<body>
<style>
#a2 { width: 400px; height: 300px; background: #eeeeee; }
#a3 { width: 400px; height: 300px; background: red; }
</style>
<script>
var IE = false, IE6 = false, IE7 = false;
if(window.ActiveXObject) {
    IE = true;
    var uaVers = window.navigator.userAgent.substr(window.navigator.userAgent.indexOf('MSIE') + 5, 3);
    if(uaVers.slice(0, 1) == 6) { IE6 = true; }
    else { IE7 = true; }
}
window.onload = function() { set1(); };
function set1() {
    var el = document.getElementById('a2');
    (function(el){
    if(el.addEventListener) {
        el.addEventListener("mousemove", function(e){hand2(e, el)}, false);
    } else {
        el.attachEvent("onmousemove", function(e){hand2(e, el)});
    }
    })(el);
    el = document.getElementById('a3');
    (function(el){
    if(el.addEventListener) {
        el.addEventListener("mousemove", function(e){hand2(e, el)}, false);
    } else {
        el.attachEvent("onmousemove", function(e){hand2(e, el)});
    }
    })(el);
}
function hand2(e, el) {
    var bk = document.getElementById('a1');
    bk.innerHTML = "el: " + el.id + "x: " + xmouse(e);
}
function xmouse(e) { if(IE) { return event.clientX; } else { return e.pageX; }}
</script>
<span id="a1"></span>
<br />
<div id="a2"></div>
<div id="a3"></div>
</body></html>

PM MAIL WWW Skype   Вверх
bars80080
Дата 16.11.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



да, до такого бы я не догадался

таким макаром код в первом посте преобразовался к следующему виду:

Код

    if(ell < 1) { return false; }
    if(el[0].addEventListener) {
        for(var i = 0; i < ell; i++) {
            if(el[i].className != 'ihint') { continue; }
            el[i].onmouseout = function() { ihint_out(); };
            (function(my) {
                my.addEventListener("mouseover", function(e){ ihint_over(e, my) }, false);
                my.addEventListener("mousemove", function(e){ ihint_move(e) }, false);
            })(el[i]);
        }
    } else {
        for(var i = 0; i < ell; i++) {
            if(el[i].className != 'ihint') { continue; }
            el[i].onmouseout = function() { ihint_out(this); };
            (function(my) {
                my.attachEvent("onmouseover", function(e){ ihint_over(e, my) });
                my.attachEvent("onmousemove", function(e){ ihint_move(e) });
            })(el[i]);
        }
    }

всем спасибо


кстати, заметно что ИЕ в случае перемещения отрабатывает быстрее, чем ФФ, опера и хром
PM MAIL WWW   Вверх
brother79
Дата 17.11.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 1
Всего: 6



В твоём примере не понятно:

1) откуда вообще берётся Event может он просто недоступен из этой ф-ии, надо знать где он определяется и откуда он видимый?
2) 

Цитата(bars80080 @  13.11.2009,  15:04 Найти цитируемый пост)
во-первых, уже здесь не получается отдать event в функцию ihint_move

во-вторых, даже если просто прописать в тэге <img onmousemove="func1(event);" />,
то не получается передать событие в следующую функцию:


Что понимается под "не получается"? 

попробый в ф-ии написать alert(event), посмотри что браузер скажет? Даже если у тебя это ф-я, он должен её показать как ф-ю.


--------------------
PM MAIL WWW   Вверх
bars80080
Дата 17.11.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



brother79, уже всё решено. код из первого поста заменил последний
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0759 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.