-PR-
  • すぐに回答を!
  • 質問No.7345657
解決
済み

jqueryでテキストエリア監視について

  • 閲覧数7578
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 19% (31/161)

下記のコードのようにテキストエリアが変わったら処理を
実行したいのですが、keyup changeを指定すると
処理が2回実行されてしまいます。

テキストエリアが変化したら、1度づつ処理させるには
どのようにしたらいいでしょうか?

ご教授の程、よろしくお願いいたします。

$(function(){
$('textarea').bind('keyup change',function(){
alert('処理');
});
});
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 61% (1594/2576)

実際の処理がどのような内容になっているのかにもよりますが、keyup changeの両方を指定すると、必ず最後に同じ状態で2回処理をすることになってしまうので、keyupだけで充分かと想像します。


>ctrl+vでペーストされた場合に2回処理されてしまうのは
>仕方のないことなのでしょうか??
keyupは文字通りkeyup時に発生しますので、ctrlキーだけをキーアップしても発生します。これはshiftやdelやescその他のキーでも同様です。
keyの種類によって処理を実行させたくないのであれば、keycodeを取得して判定するか、あるいは、対象としているテキストエリアの値を記録しておいてその内容が変わっていたら処理を行なうとかにすれば2回実行せずに済むかと思います。
(後者は、リアルタイムでのonchangeに近い感じかも…)

>テキストエリアが変化したら、1度づつ処理させるには
>どのようにしたらいいでしょうか?

例えば、後者の考え方の例。
(例示の対象が'textarea'となっていて、idではないので、複数に対応可能な記述にしています)
(インデントは全角空白にしています)

$(function(){
 $('textarea').each(function(){
  $(this).bind('keyup', hoge(this));
 });
});

function hoge(elm){
 var v, old = elm.value;
 return function(){
  if(old != (v=elm.value)){
   old = v;
   alert("処理");
  }
 }
}
お礼コメント
hunter_999

お礼率 19% (31/161)

ご回答ありがとうございます。
例を参考にうまく処理することが出来ました。

本当にありがとうございました。
投稿日時 - 2012-03-08 11:12:30
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル11

ベストアンサー率 40% (110/270)

keyupのみで良いのでは? keyupはキーが離された時 changeは対象からフォーカスが外れてボックス内容が変更されていた時 にイベントを投げます。 ですので、おそらくやりたいことはkeyupのみで出来るのではないでしょうか。 ...続きを読む
keyupのみで良いのでは?
keyupはキーが離された時
changeは対象からフォーカスが外れてボックス内容が変更されていた時
にイベントを投げます。
ですので、おそらくやりたいことはkeyupのみで出来るのではないでしょうか。
補足コメント
hunter_999

お礼率 19% (31/161)

ご回答ありがとうございます。
ctrl+vでペーストされた場合に2回処理されてしまうのは
仕方のないことなのでしょうか??
投稿日時 - 2012-03-06 11:17:26
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ