jQueryでグローバル変数に要素を代入した後にその変数を利用したいのですが記述方法がわかりません。
var element;
// クリックしたinputの要素をelementに代入
$(function(){
$("input").click(function(){
element = $(this);
});
});
// elementを利用する
function alertEx(){
alert($(element).val());
}
alertEx関数を実行するとクリックしたinputの値を表示するようにしたいです。
alertEx関数でのelementの使い方が間違っていると思うのですが、どのように記述すればinputの値をalert表示できるのでしょうか?
知りたいのは、あくまでも要素をelementに代入した後の利用の仕方です。
表示方法とかではないです(上記コードは例です)。
どうぞよろしくお願い致します。
No.2ベストアンサー
- 回答日時:
> element.click(function(){
> ~
> }
>
> ↑これはエラーが出てしまいました。
ん~、ぬるぽだったんじゃないか? 一度elementが設定されたらそんな事はないはずだけど。例えば、<head>内に以下のように書いたとしよう。
var element;
// クリックしたinputの要素をelementに代入
$(function(){
$("input").click(function(){
element = $(this);
});
});
// elementを利用する
function alertEx(){
alert($(element).val());
}
element.click(function(){ // ・・・(1)
alert("hoge");
});
これは明らかにミスだ。なぜならば、(1)の時点ではelementはnullだからだ。だがしかし、
var element;
// クリックしたinputの要素をelementに代入
$(function(){
$("input").click(function(){
element = $(this);
});
});
// elementを利用する
function alertEx(){
element.click(function(){ // ・・・(2)
alert("hoge");
});
}
これは即座にはエラーにならない。このページがロードされた後、一度もinputタグをクリックせずにalertEx()を呼び出して(2)に到達した時だけエラーになる。IE10、jquery 1.8.3で確認。これもエラーにならないようにするには
function alertEx(){
element && element.click(function(){
alert("hoge");
});
}
などとnullチェックを追加すれば良い。ところが、これだとalertEx()が呼び出された時にelementに入っているinputにどんどんどんどんイベントハンドラが追加されていってしまう。画面をロードしてinputをクリック→alertEx()を3回呼び出す→inputをクリックするとhogeが3回アラートされるようになる。これはフラグを持つなりで自分で対処しないといけない。
「エラーが出る」というのは具体的に書いた方がいいだろう。そのコードを書いた後、どのブラウザで、どうした時に、何というエラーメッセージが表示されるのか。
No.3
- 回答日時:
既にNo.1さんが回答されていますが、clickが有効にならない件について、横から失礼します。
有効にならない理由はNo.2さんが述べられていますので、その解決策として違うアプローチを書いてみます。
単純に言うと、inputをclickしないとelementに要素が入らないわけなので、element.clickの宣言がinputのclick後であれば問題はないわけです。
従って、以下のように関数を使わずにinput click内に直接clickイベントを書くか、
$("input").on("click",function(){
element = $(this);
element.on("click,function(){
alert(element.val());
});
});
clickイベントを外部関数に持ち出したいのであれば、elementを引数にして渡せばよいです。
$("input").on("click",function(){
element = $(this);
clickEv(element);
});
function clickEv(element){
element.on("click",function(){
alert(element.val());
});
}
ただ、例の場合、elementの対象がinput、つまり、初回にクリックする要素と同じなので、本当に例の通りの実装ならば無意味な記述ですね。
No.1
- 回答日時:
// elementを利用する
function alertEx(){
alert($(element).val());
}
↓
// elementを利用する
function alertEx(){
alert(element.val());
}
こうだな。なぜかと言うとelementには既に(input要素ではなく)jQueryオブジェクトが入っているから。もちろんelementがnullじゃないチェックとかは要るぜ。
ありがとうございます!
ちなみに、
element.click(function(){
~
}
↑これはエラーが出てしまいました。
$('input').click(function(){
~
}
はできるのに、なぜ$('input')をelementに置き換えるとエラーになるのでしょうか?
度々すみません・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
- 英語 「第1および第2の要素」の英語 4 2022/03/24 09:55
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- PDF PDF elementで白文字?というか見えない文字を表示させる方法を教えてください 1 2022/05/19 03:20
- HTML・CSS <input>のstep属性に違反する入力をした時にエラーメッセージを表示させない事は可能か 2 2023/02/16 04:11
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
functionから別のfunctionを実...
-
関数でy=g(x)のgとは何の略です...
-
クリックすると上に開くアコー...
-
getElementByIdを使用したグロ...
-
要素名がスペースを含む場合のj...
-
idを使わずにonclickで自身の要...
-
jslintのエラーについて質問
-
setTimeoutで、止まらない
-
無名関数を使うメリットは何で...
-
pythonでのクロージャの記述
-
jqueryの変数を関数の外に出す方法
-
コードをスマートにさせたい。
-
ajax反映後のjqueryが動かない
-
google apps scriptの終了のさせ方
-
翌月を取得するGASが分かりません
-
GASでundefinedエラーが出ます
-
日付の書式の確認方法
-
Linux バイナリ実行できない "...
-
ジェネレーターの作り方
-
ActiveXobjectが作成できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
functionから別のfunctionを実...
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
phpでの文字の点滅表示
-
JAVAスクリプトで指定時間以降...
-
jslintのエラーについて質問
-
ページ内に複数表がある場合のT...
-
XMLHttpRequestでキャッシュを...
-
関数名をテキストから読み込む...
-
jQueryでzipを解凍読み込みする...
-
getElementByIdを使用したグロ...
-
jQuery 同じ処理を関数にまとめ...
-
クリックすると上に開くアコー...
-
小数点以下を5刻みで表示
-
Javascriptで引数の参照渡しか...
-
jQueryの"return false"の役割...
-
javascript(jQuery)でセル内...
-
jQueryの :not() .not() が有効...
-
jqueryの変数を関数の外に出す方法
-
jquery 複数のメソッド
おすすめ情報