Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2015, 21:03
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

bind передача event и this одновременно
Подскажите пожалуйста, можно ли передать одновременно и параметр eventMouse и нужный мне контекст?
Поясню:
//1
MyElement.ondrop = this.MyFunction

function MyFunction(e){
   console.log(e) // EventMouse
}

//2
MyElement.ondrop = this.MyFunction.bind(this)

function MyFunction(e){
   console.log(e) // Нужный мне контекст
}

А как мне сделать так, чтобы получить сразу и контекст и переменную события?
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2015, 21:33
Интересующийся
Посмотреть профиль Найти все сообщения от pornoborets
 
Регистрация: 07.06.2015
Сообщений: 26

пробросить явно его
<html>
<head>
</head>
<body>

<p id="p1" foo="bar">foo</p>
<p id="p2" foo="bar">foo</p>

<script>

context1=function(){this.a=1}
context2={a: 10}

p1.onclick=function(e){with(new context1) with(this) {alert([e, a])}}
p2.onclick=function(e){with(context2) with(this) {alert([e, a])}}


</script>

</body>
</html>

Последний раз редактировалось pornoborets, 07.06.2015 в 21:42.
Ответить с цитированием
  #3 (permalink)  
Старый 07.06.2015, 21:39
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Но если я правильно понял, аргумент eventMouse вы так и не передали в функцию onclick
Ответить с цитированием
  #4 (permalink)  
Старый 07.06.2015, 21:46
Интересующийся
Посмотреть профиль Найти все сообщения от pornoborets
 
Регистрация: 07.06.2015
Сообщений: 26

Сообщение от Siend
Но если я правильно понял
Нет, неправильно поняли. Посмотрите на вывд алерт.(нажмите кропку запустить, и кликните по элементам)
Ответить с цитированием
  #5 (permalink)  
Старый 07.06.2015, 21:47
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Спасибо огромное! То что нужно)
Ответить с цитированием
  #6 (permalink)  
Старый 07.06.2015, 22:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

pornoborets,
Siend,
посмотрите код ниже, если он неправильный, как его правильно решить без with?
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>

<p id="p1" foo="bar">foo</p>
<p id="p2" foo="bar">foo</p>

<script>

var context1=function(){this.a=1}
var context2={a: 10}
var fn = function(e){alert([e,this.a, e.target])}
p1.onclick = fn.bind(new context1);
p2.onclick = fn.bind(context2);


</script>

</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 07.06.2015, 22:47
Интересующийся
Посмотреть профиль Найти все сообщения от pornoborets
 
Регистрация: 07.06.2015
Сообщений: 26

рони,
У тебя тут не связан контекст самого элемента.

<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
 
<p id="p1" foo="bar">foo</p>
<p id="p2" foo="bar">foo</p>
 
<script>
 
var context1=function(){this.a=1}
var context2={a: 10}
var fn = function(e){try{alert(this.getAttribute("foo"))}catch(e){alert(e)}}
p1.onclick = fn.bind(new context1);
p2.onclick = fn.bind(context2);
 
 
</script>
 
</body>
</html>

тут вообще говоря, существует тьма чрезжопных решений, можно пропихивать кусками через замыкания, через call/apply/bind, только все это не нужно.

Последний раз редактировалось pornoborets, 07.06.2015 в 22:51.
Ответить с цитированием
  #8 (permalink)  
Старый 07.06.2015, 22:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

pornoborets,
а вы могли бы показать вариант без with?
Ответить с цитированием
  #9 (permalink)  
Старый 07.06.2015, 23:23
Интересующийся
Посмотреть профиль Найти все сообщения от pornoborets
 
Регистрация: 07.06.2015
Сообщений: 26

рони,
Я же говорю, нормальных решений я не вижу. Только кусковым методом. e.g.
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
 
<p id="p" foo="bar">foo</p>
 
<script>

p.onclick=function(o){
 return function(){alert([o.a, this.getAttribute("foo")])}
}({a: 1})
 
</script>
 
</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 07.06.2015, 23:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

pornoborets,
ок, спасибо и за это!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как создать event, эмулирующий enter Artanis Events/DOM/Window 7 16.07.2019 06:40
Событие event в FireFox yambbkru Firefox/Mozilla 2 12.02.2013 18:19
event + setTimeout fsingle Events/DOM/Window 2 02.05.2012 09:07
Передача кастомных данных в событие и удаление обработчика FINoM Общие вопросы Javascript 1 31.12.2011 06:29
передача event HelpeR Events/DOM/Window 15 24.10.2011 09:39