<script type="text/javascript">
function test1(a,func){
document.addEventListener(a,func,false);
}
test1("click",function(ev){
n=ev.screenX;
});
console.log(n);
</script>
といいう感じで取得した座標nを関数の外console.log(n)の位置で取得したいのですが
どうすればいいのでしょうか?
function test1(a, func) { document.addEventListener(a, func, false); } test1("click", function (ev) { n = ev.screenX; }); test1("click", function (ev) { console.log(n); });
質問としては「関数の外で取得したい」というよりも(普通に取得出きるので)「関数の終了後に別の関数を実行したい」という事になるかと思った。
ちなみにこれの n は window.n になります。所謂グローバル変数です(グローバル変数にしなくてもOKです http://jsfiddle.net/LRU4M/2/ )。
以下蛇足
addEventListenerの仕様を読むと下記じゃないとダメかと思ったけど上記でOKっぽい。なんでだろう。
http://jsfiddle.net/8wWd3/1/
https://developer.mozilla.org/ja/docs/Web/API/EventTarget.addEventListener
ターゲットに対して 2 つ以上のイベントリスナーを登録するには、同じターゲットに対して、異なるイベントタイプ、あるいは、キャプチャパラメータを指定して addEventListener() を呼び出します。
function test1(a, func) { document.addEventListener(a, func, false); } test1("click", function (ev) { n = ev.screenX; }); test1("click", function (ev) { console.log(n); });
質問としては「関数の外で取得したい」というよりも(普通に取得出きるので)「関数の終了後に別の関数を実行したい」という事になるかと思った。
ちなみにこれの n は window.n になります。所謂グローバル変数です(グローバル変数にしなくてもOKです http://jsfiddle.net/LRU4M/2/ )。
以下蛇足
addEventListenerの仕様を読むと下記じゃないとダメかと思ったけど上記でOKっぽい。なんでだろう。
http://jsfiddle.net/8wWd3/1/
https://developer.mozilla.org/ja/docs/Web/API/EventTarget.addEventListener
ターゲットに対して 2 つ以上のイベントリスナーを登録するには、同じターゲットに対して、異なるイベントタイプ、あるいは、キャプチャパラメータを指定して addEventListener() を呼び出します。
コメント(6件)
動作するはずですか?
やりたいことは、関数の中(test1)で取得した変数nの値を関数の外で使いたいということなんですが、
console.log(n);の出力結果は n is not defined となってしまっています。
何がいけないのでしょうか・・・・
それだと、スクリプトを読み込んだ時点、クリックする前にnを取得してしまうことになるので、現実的にnに値が入ることはまずないと思うんですが。nを取得するタイミングみたいなものはないんですか?
関数内のnに数値が入るのは画面をクリックしたときで
<script type="text/javascript">
function test1(a,func){
document.addEventListener(a,func,false);
}
test1("click",function(ev){
n=ev.screenX;
console.log(n);
});
</script>
こんな感じでコンソールへの出力を関数内で処理すれば、画面をクリックするたびに座標がコンソールに出力されていくのですが、
このとき取得したnを関数の外でも使いたいということなんです。
説明がややこしくてすみません。
return n とかやってみてもどこに返ってくるか分からず混乱してます。
なんか基本的なことを見落としている気もするのですが・・・・
この書き方じゃダメってことですよね?
function test1(a,func){
document.addEventListener(a,func,false);
}
test1("click",function(ev){
n=ev.screenX;
log();
});
function log(){
console.log(n);
}
settimeoutでも使うしかないかな?
おかげで少し考えが整理されてきました。
根本をもう少し考え直しててみます。