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

テキストフィールドで、1文字目を入力したときだけ動き、それ以降入力されても実行されないメソッドというのがやりたいのですが、イベントでは該当するものがなさそうです。

また、一回入力データを空にしてもう一度入力するとまた実行される風にやりたいです。

実現方法等あるのでしょうか。
英字だと、グローバル変数等でフラグを保持しておいてcharAtなどで判定できそうな気はしますが日本語などマルチバイトだと文字確定までは動かないと思うので難しいかなとも思っています。

A 回答 (3件)

<html>


<script>
var g_length = 0;
function test(obj) {

if ((!g_length) && (obj.value.length > 0)) {
alert("test");
}

g_length = obj.value.length;

}
</script>
<body>
<input type="text" onkeyup="test(this);" onkeydown="test(this);">
</body>
</html>

keydownイベントは半角英数字の入力と全角文字の入力時でIEの動きが異なる。(半角英数字は入力前、全角文字はなぜか入力後にイベントが発生する)
keyupイベントは入力をしっぱなし(キーを押しっぱなし)で入力されると正確に一文字目入力時にイベントを走らせることができない。
以上二点からonkeyupとonkeydownの両イベントを実装することにした。
※まぁ1点目に関してはevent.keyCodeで入力キーを取得して判定してもいいが。

ところで日本語文字の場合を気にされているみたいだが何ゆえ?
古いバージョンのNNを考慮しているのだろうか?
Shift-jisにおける2バイト文字の扱いを今さら気にしているサイトは少ないと思うが‥
    • good
    • 0
この回答へのお礼

ありがとうございます。
日本語文字は確定しないとイベントが動かなかったような気がしたので、ちゃんと判定できるかどうか不安だったためです。
ブラウザによって違うのかもしれませんが

お礼日時:2009/11/10 09:30

すみません、間違えました。


こういうことでしょうか?

<script>
function check(obj){
if(!obj.value.match(/^.$/)) return false;
alert(obj.value);
}
</script>
<input type="text" onkeyup="check(this)">

2文字目から1文字削除しても動いてしまいますが、まずいですか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまく動きました。
1文字目のときに動かしたいので削除した際でもかまいません。

お礼日時:2009/11/10 09:26

こんな感じで



<input type="text" onkeyup="this.value=this.value.replace(/^(.).+/,'$1')">
    • good
    • 0
この回答へのお礼

すみません、1文字にしたいわけではなく
1文字入力した場合のみユーザ関数を実行してそれ以降文字を入れても関数は実行しないということをしたかったのです。
わかりづらくてもうしわけありません。

お礼日時:2009/11/09 18:56

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