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

フォームに入力された文字をステータスバーに流したいのですがどうしてもわかりません。(動かさずに表示させることは出来ました。)

<html>
<body>
<form method="post">
文章を入力してください<br>
<input type="text" size="30" onchange="a(this)">
</form>
</body>
</html>
<script language="javascript">

function a(t){
tt=t.value;
nagasa=tt.length;
text=tt.substring(2,nagasa) + tt.substring(0,2);
window.status=text;
setTimeout("a('"+text+"')",1000);
}

自分でも何かおかしいと思うのですがどうしても思いつけません。
わかる方教えてください。よろしくお願いします。

A 回答 (1件)

いろいろとあるので、順番に行きます。



・a()に渡されている引数が違う
onChange時にa()にthisを渡していますが
a()内ではtextを渡しています。
onChange時にthis.valueを渡す様にしましょう。

・停止を行っていない
onChangeで行う場合、変更がある度に
a()が実行されるので、複数の文字がステータスバーを
流れる事になります。
という事で、onChangeでa()が実行される度に
その前に動いていたa()を止めないといけません。

・<script>の場所がおかしい
これは直接関係ありませんが、<script>が<html>~</html>の
外にあります。
一応動くようですが、ブラウザによっては動かないかもしれません。

a()の停止処理があるので、1個functionを間に挟んだ形での
サンプルです。
--------------- ここから -----------------
<html>
<head>
<script language="javascript">
<!--
var pid = 0; //setTimeoutのプロセスID
var doing = false; //a()実行フラグ

function loop_string( txt ){
if( doing ){
clearTimeout(pid);
}
if( txt.length > 0 ){
pid = a(txt);
} else {
doing = false;
}
}
function a(t){
var t_len = t.length;
var t_str = t.substring(2,t_len) + t.substring(0,2);
window.status = t_str;
pid = setTimeout("a('" + t_str + "')",1000);
doing = true;
}
//-->
</script>
</head>
<body>
<form method="post">
文章を入力してください<br>
<input type="text" size="30" onchange="loop_string(this.value);">
</form>
</body>
</html>
------------- ここまで ----------------
    • good
    • 0
この回答へのお礼

出来ました!ありがとうございます!

丁寧に説明していただき本当に助かりました。
<script>はやっぱり<html>~</html>に入れないとダメなんですね。
教えて下さる方がああいう書き方をしていたのでそのように覚えていました。これからは気をつけます。

お礼日時:2006/11/29 21:58

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