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) // Нужный мне контекст
}
А как мне сделать так, чтобы получить сразу и контекст и переменную события? |
пробросить явно его
<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>
|
Но если я правильно понял, аргумент eventMouse вы так и не передали в функцию onclick
|
Цитата:
|
Спасибо огромное! То что нужно)
|
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>
|
рони,
У тебя тут не связан контекст самого элемента.
<!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,
а вы могли бы показать вариант без with? |
рони,
Я же говорю, нормальных решений я не вижу. Только кусковым методом. 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>
|
pornoborets,
ок, спасибо и за это! |
| Часовой пояс GMT +3, время: 15:34. |