
現在、JQueryについて学習しています。記述はeach文の中にfocusメソッドとblurメソッドを入れています。
動作自体は問題がなく動いていますが、その仕組みがよく理解できません。
eachはセレクタで指定した要素数分、一度だけ処理をおこなうと理解していたのですが(li要素が2つあったとしたら2回each内を繰り返す。)下記を実行してみるとフォーカスしたとき、フォーカスが外れたときに処理が行われ、その処理を何度クリックしても、その動作を繰り返します。
/****************************************
jQueryのコード
*****************************************/
$(document).ready(function(){
$(".textbox").each(function(){
//======1
var labelText=$(this).val();
$(this).focus(function(){
if($(this).val()==labelText){
$(this).val("");
}
}).blur(function(){
if($(this).val()==""){
$(this).val(labelText);
}
});
//=====2
});
});
/****************************************
ここからHTMLのコード -->
*****************************************/
<p>
<input type="text" class="textbox" size="40" name="name" id="name" value="お名前" />
</p>
<p>
<input type="text" class="textbox" size="40" name="email" id="email" value="メールアドレス" />
</p>
<p>
<input type="submit" class="button" value="送信" />
</p>
ためしに一度、テキストボックス以外をクリックした後にまた、テキストボックスをクリックしてもeachイベントが始まります。
//======1から//=====2までの中身をただアラートを表示するだけならテキストボックスのかず分、表示してその処理は終わりました。
そして、再びeach内の処理を始めたかったらブラウザを更新するしかなかったのですが、
なぜ、なかのイベントをfocusとblurにすると何度もeach内の処理が行われるのでしょうか。
初心者で大変お恥ずかしい質問なのですが、ご教授頂けると大変助かります。
どうぞよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
> eachはセレクタで指定した要素数分、一度だけ処理をおこなうと理解していたのですが(li要素が2つあったとしたら2回each内を繰り返す。
)この認識はあっています。しかし、
> 下記を実行してみるとフォーカスしたとき、フォーカスが外れたときに処理が行われ、その処理を何度クリックしても、その動作を繰り返します。
で実行しているのは each 文の直接の内部ではありません。
メソッドチェーンしているので blur の方を抜かし片方だけにして書きますが、
$(this).focus(function(){
if($(this).val()==labelText){
$(this).val("");
}
});
という文は2つに分けて考えます。
一つは
$(this).focus(...);
で、これが each の中で実行されていることです。この focus() メソッドは、$(this) で表される要素にフォーカスがあった時に引数として渡された関数を実行するように設定します。いいですか、「設定」だけです。渡された関数はこのメソッドを実行した時点では実行されません。
もう一つは
function(){
if($(this).val()==labelText){
$(this).val("");
}
}
で、上記の通り each の中を実行しているときにはこの関数は実行されません。実行されるのは、上記にある通り「フォーカスがあった時」です。フォーカスがあったなら何度でも実行されます。
hitomuraさんご回答いただきまして、ありがとうございます。
この focus() メソッドは、$(this) で表される要素にフォーカスがあった時に引数として渡された関数を実行するように設定するだけなのですね。
だからeachは、focusあると何度でも実行されるということがわかりました。
お忙しい中、ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで年齢を計算する方法について
-
一定時間ごとの実行
-
JavaScriptにおいて、「同一ペ...
-
iphoneアプリ実行結果について
-
returnの意味や用途の解説の補...
-
JSPの処理の途中で、JavaScript...
-
C言語でタイマーを作成する方法...
-
自作関数から WndProc( ) を止める
-
forの中でsetTimeoutする時のス...
-
彼女がして欲しいこと。
-
javascriptのおすすめ教科書
-
リクエスト結果が一瞬しか表示...
-
ラベルの色がかわってくれない
-
構文チェックでのエラー?
-
既存のwebサイトで、ローカルの...
-
javaを相手のブラウザに表示させる
-
javascript 演算子の「!」_2
-
ジャバスクリプトのエラーを直...
-
文字列の検索
-
FLASHってネット上での表示につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
JavaScriptでショートカットキ...
-
以下のコードを実行しても、オ...
-
デザイン時のVisible=Falseは実...
-
C#でボタン名を変更しても動く
-
〔Excel:VBA〕マクロの実行が異...
-
VBA ステータスバー DoEvents
-
リクエスト結果が一瞬しか表示...
-
ラベルの色がかわってくれない
-
1つのVBAコードをすべてのコア...
-
VBA SORT Applyでエラー
-
初心者です。gulpでコンパイル...
-
eval()の危険性の具体例を教え...
-
列を非表示にするマクロが実行...
-
PowerPointで時計表示
-
innerHTMLなどの反映タイミング
-
JavaScriptで、実行するたび値...
-
VB.netでタイマーがスタートし...
-
alert()が実行できない
おすすめ情報