プロが教える店舗&オフィスのセキュリティ対策術

SendKeys()が一番最後に実行されてしまう。

コマンドボタン(<input type="button onclick="jidou();">)をクリックすることで、
<form>内の<textarea>に、連続して文字を自動入力させようとしています。
このとき、挿入する文字の途中に、何度かSendKeys("{ENTER}")を挟んで改行をさせているのですが、なぜか、全ての文字がセットされたあとで、最後にまとめて、改行(SendKeys("{ENTER}"))されてしまいます。

解決に行き詰っています。どなたかご存知の方、ご教授願えないでしょうか。
よろしくお願いします。


function jidou()
{
  :
 (文字挿入)
  :

var wsh = new ActiveXObject("WScript.Shell");
document.getElementById("textarea1").focus();
wsh.SendKeys("{ENTER}");
wsh=null;
  :
 (文字挿入)
  :
}

A 回答 (8件)

何故Enterのキーストロークを送出する必要があるのか


わかりません。
改行させたいなら、”¥n”を入れるだけだと思うんですが...

この回答への補足

>何故Enterのキーストロークを送出する必要があるのか
>わかりません。
>改行させたいなら、”¥n”を入れるだけだと思うんですが...

質問にも書きましたが、<testarea>へ書き込むからです。
入力者は、改行するたびに、”¥n”を入力しないと思われます。
それだけのことです。
よろしくお願いします。

補足日時:2010/06/02 11:29
    • good
    • 0

「function idou()の中で"\n"を挿入しては」


という意味なんですが..
function jidou()
{
  :
 (文字挿入)
  :
 ("\n"挿入)
  :
 (文字挿入)
  :
}

この回答への補足

「入力者は改行に”¥n”を入力しない」
の意味は、
「ああああ¥nいいい¥nううう・・・・」


なお、質問の主旨は、
「Sendkeysコマンドは一番最後に実行されてしまうのを解決したい」です。
よろしくお願いします。

補足日時:2010/06/02 12:48
    • good
    • 0


  :
 (文字挿入)
  :

部分のコードを少しでも書いてください。でないと意味が解りません。

「コマンドボタン(<input type="button onclick="jidou();">)をクリックすることで、
<form>内の<textarea>に、連続して文字を自動入力させようとしています。」
と矛盾してませんか。自動入力ってだれがするのですか、全部キーストローク送出で
自動入力させてるのですか?

補足:
ベストアンサー下さいね!

この回答への補足

再三のご回答ありがとうございます。

>部分のコードを少しでも書いてください。
たとえば、
selection.text = "あああ";

理解不足で大変申し訳ございませんが、
>矛盾してませんか。
の意味がわかっていません。教えていただけませんか。

>だれがするのですか
この<textarea>に入力する人、つまり、システム利用者です。

>全部キーストローク送出で自動入力させてるのですか?
手入力もあります。定型的な部分をボタンで一括入力させたいのです。

>ベストアンサー下さいね!
期待しております。

補足日時:2010/06/02 13:33
    • good
    • 0

No1.2.3の回答者です。


「Sendkeysコマンドは一番最後に実行されてしまうのを解決したい」です。
==>
肝心な事を書き忘れてました。
ブラウザーがjavascriptの1ステートメント実行中に、外から割り込んでも、
そのステートメントが終わるまでは、受け付けられません。OSレベルで
フォースすれば止まらなくはないですが、ブラウザー強制終了という事になります。

よって、別案を提示しようとしている次第です。
    • good
    • 0

というわけで、


後からの処理になりますが、任意の<textarea>内の任意の文字の後ろに「改行」を
セットする関数を作りました。
 ※コードの全角空白は半角空白にかえて下さい。
function add_Kaigyo(target,search){
 var Regexp = new RegExp("");
 Regexp.compile(search,"g");
 var target_str=target.value;
 var new_str=target_str.replace(Regexp,function(){
   if(RegExp.rightContext.charAt(0)!="\n")
   return arguments[0]+'\n';
   else return arguments[0];
 });
 Regexp = null;
 target.value=new_str;
}
使い方の例、
<textarea id="hoge" cols="80" rows="30"></textarea>
を対象として、「。」の後ろで改行を挿入したい場合、

 var search="。"; // <=正規表現パターンでも指定可能!
 var target=document.getElementById("hoge");
 add_Kaigyo(target,search);

と使えます。
    • good
    • 0

ちょっとは入り込みにくい雰囲気ですが、書きだしたい欲求には勝てませんでした…。

(苦笑)
(全角空白は半角空白に置換してください)

------
<script type="text/javascript"><!--
function add_Kaigyo(event, targetId, search){
 var button = event.target || event.srcElement;
 var doc = button.ownerDocument;
 var target = doc.getElementById(targetId);
// target.value = target.value.split(search).join(search+"\n");
 target.value = target.value.replace(new RegExp(search+"(?!\n)", 'g'), search+"\n");
}
//--></script>
</head>
<body>

<form>
 <p><textarea id="hoge" cols="80" rows="30">foo test hoge test
hello test</textarea></p>
 <p><input type="button" value="改行を挿入する" onclick="add_Kaigyo(event, 'hoge', 'test');"></p>
</form>
------

"test\n" を置換対象から除外したいなら、このまま。
そうでないなら、コメントアウトしたコードにすればOKです。
    • good
    • 0

あ~あ


 否定の先読み(!パターン)
 肯定の先読み(=パターン)
 グループ化のみ(?パターン)
の3つはjavascriptでも使えるんですね。
先週気づいてたら、別のやつにも使えたのに...残念

この回答への補足

yyr446様、think49様、ご回答、誠にありがとうございます。
また、ご連絡が遅れましたことをお詫び申し上げます。

御二方のご回答ともに、
<textarea>内にすでに文字が入力されている状態で、その中の特定の文字の後ろを改行させるやりかたですね。
やはり、yyr446様のご回答のとおり、
>ブラウザーがjavascriptの1ステートメント実行中に、外から割り込んでも、
>そのステートメントが終わるまでは、受け付けられません。
ということで、途中でSendKeysを実行できないのですね。
そして、別の方法として、一旦、<textarea>に文字を入力して、そのあとに改行させるというやり方になるわけでしょうか。
しかし、その場合、同じ文字でも改行させてたくない場合でも、改行されるということでしょうね。
解決策としては、このあたりなのでしょうね。

私と希望としては、1つのボタンクリックで
文字入力+改行+文字入力+改行+文字入力+・・・
を一気に入力したかったのですが、今回はこの方法はあきらめ、お二方のご回答を参考にして対応します。

しかしながら、皆様のご回答には大変勉強になりました。
本当にありがとうございました。

補足日時:2010/06/03 08:56
    • good
    • 0

単純に・・・


ボタンを押したらtextareaに改行入りの定型文を挿入したいってこと?

<script type="text/javascript">
function insText(id,text){
var T=document.getElementById(id);
T.focus();
if(window.getSelection) {
var pos = T.selectionStart;
var t1 = T.value.substring(0,pos);
var t2 = T.value.substring(pos);
T.value = t1 + text + t2;
} else {
var s = document.selection.createRange();
s.text = text;
}
}
</script>

<p>
<input type="button" value="あ行" onclick="insText('hoge','あ\nい\nう\nえ\nお')">
<input type="button" value="か行" onclick="insText('hoge','か\nき\nく\nけ\nこ')">
</p>
<p>
<textarea id="hoge" cols="40" rows="10"></textarea>
</p>

この回答への補足

ご回答ありがとうございます。

>ボタンを押したらtextareaに改行入りの定型文を挿入したいってこと?
ご指摘の通りです。言葉足らずで大変失礼しました。

そして、steel_gray様のご回答に従い、コーディングしましたら、
無事うまくいきました。
大変勉強になりました。ありがとうございました。

補足日時:2010/06/04 08:57
    • good
    • 0

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