アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

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

$(function(){
$('textarea').bind('keyup change',function(){
alert('処理');
});
});

A 回答 (2件)

実際の処理がどのような内容になっているのかにもよりますが、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("処理");
  }
 }
}
    • good
    • 0
この回答へのお礼

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

本当にありがとうございました。

お礼日時:2012/03/08 11:12

keyupのみで良いのでは?


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

この回答への補足

ご回答ありがとうございます。
ctrl+vでペーストされた場合に2回処理されてしまうのは
仕方のないことなのでしょうか??

補足日時:2012/03/06 11:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!