テキストボックスのカーソルの位置を知るには?

[上に] [前に] [次に]
poyopoyo 2000/06/02(金) 11:43:06
こんにちは、よろしくお願いいたします。

JavaScriptで、テキストボックスに記入するときに、
よく使用する文字列をボタンで挿入させたいと思っています。
テキストボックスのカーソルの位置に挿入させたいのですが、
カーソルの位置を知る方法はありますか?

今は、下記のように、入力された文字列の後ろに挿入させています。
長文ですみませんが、ソースを書きます。

--ここからソース--

<HTML>
<HEAD>
<TITLE>例</TITLE>

<SCRIPT LANGUAGE="JavaScript">
<!--
msg=new Array();
msg[0]='株式会社';
msg[1]='有限会社';
msg[2]='(株)';

function OfficeButton(indexNo)
{
    document.form1.fmsg.value=document.form1.fmsg.value+msg[indexNo]
}
//-->
</SCRIPT>

</HEAD>
<BODY>
<TABLE BORDER="0" ALIGN="center">
<FORM NAME="form1">
<TR><TD><INPUT TYPE="text" NAME="fmsg" VALUE="" size="64" maxlength="64"></TD></TR>
<TR><TD><INPUT TYPE="button" NAME="0" VALUE="&nbsp;&nbsp;1&nbsp;&nbsp;" onClick="OfficeButton(0)">&nbsp; 株式会社</TD></TR>
<TR><TD><INPUT TYPE="button" NAME="1" VALUE="&nbsp;&nbsp;2&nbsp;&nbsp;" onClick="OfficeButton(1)">&nbsp; 有限会社</TD></TR>
<TR><TD><INPUT TYPE="button" NAME="2" VALUE="&nbsp;&nbsp;3&nbsp;&nbsp;" onClick="OfficeButton(2)">&nbsp; (株)</TD></TR>
</FORM>
</TABLE>

</BODY>
</HTML>

--ここまでソース--

よろしくお願いいたします。

Duck 2000/06/02(金) 12:23:51
これって、ボタンをクリックした瞬間にテキストボックスは
フォーカスを失ってしまいますよね。
だから
>テキストボックスのカーソルの位置に挿入させたいのですが、
>カーソルの位置を知る方法はありますか?
っていうのは無理じゃないですか?
(間違ってたらごめんなさい)

nobut [E-Mail] [HomePage] 2000/06/02(金) 23:54:12
テキストボックスに入っていた文字列を一度変数xに退避させて
function OfficeButton(x){
if(x == 0)x = x + "株式会社";
else(x == 1),,,,
,,,
document.form1.fmsg.value = x;
}
これじゃだめかな。
意味間違えてたらすみません。

nobut 2000/06/02(金) 23:55:47
訂正
function OfficeButton()ですね。

Mugi [E-Mail] [HomePage] 2000/06/03(土) 10:21:05
カーソル位置取得は、IEならTextRangeを使ってできます。
http://hp.vector.co.jp/authors/VA013453/js/index.htm
68番が参考になるかも。

Mugi [E-Mail] [HomePage] 2000/06/03(土) 13:21:43
サンプル作ってみました。
http://www06.u-page.so-net.ne.jp/wa2/mugi/tmp/000603.htm
IE専用。
こういうことじゃなかったらごめんなさい。

poyopoyo 2000/06/05(月) 10:16:22
poyopoyoです。
回答ありがとうございます。>ALL

Mugiさんのサンプル見させていただきました。
こういうことがしたいのですが、
Netscapeでは実現不可なのですか?
(運営上、Netscape利用者も想定しているため)

よろしくお願いいたします。

Duck 2000/06/05(月) 12:16:15
サンプル作ってみました。
********************************************
<HTML>
<HEAD>
<TITLE>例</TITLE>

<SCRIPT LANGUAGE="JavaScript">
<!--
var iText = 0;
msg=new Array();
msg[0]='株式会社';
msg[1]='有限会社';
msg[2]='(株)';

var tname = new Text();
function OfficeButton(indexNo)
{
    document.form1.elements[iText].value = document.form1.elements[iText].value + msg[indexNo];
}
//-->
</SCRIPT>

</HEAD>
<BODY>
<TABLE BORDER="0" ALIGN="center">
<FORM NAME="form1">
<TR><TD><INPUT TYPE="text" NAME="fmsg1" VALUE="" size="64" maxlength="64" onFocus='iText = 0'></TD></TR>
<TR><TD><INPUT TYPE="text" NAME="fmsg2" VALUE="" size="64" maxlength="64" onFocus='iText = 1'></TD></TR>
<TR><TD><INPUT TYPE="button" NAME="0" VALUE="&nbsp;&nbsp;1&nbsp;&nbsp;" onClick="OfficeButton(0)">&nbsp; 株
式会社</TD></TR>
<TR><TD><INPUT TYPE="button" NAME="1" VALUE="&nbsp;&nbsp;2&nbsp;&nbsp;" onClick="OfficeButton(1)">&nbsp; 有
限会社</TD></TR>
<TR><TD><INPUT TYPE="button" NAME="2" VALUE="&nbsp;&nbsp;3&nbsp;&nbsp;" onClick="OfficeButton(2)">&nbsp;
(株)</TD></TR>
</FORM>
</TABLE>

</BODY>
</HTML>
********************************************

どうでしょう?
こういうことじゃないかな。

poyopoyo 2000/06/07(水) 11:02:06
[[解決]]
poyopoyoです。

サンプルありがとうございます。>Duckさん

Duckさん> どうでしょう?
Duckさん> こういうことじゃないかな。

せっかくサンプルを投稿していただいたのですが、
私の実現したい動作とはちょっと異なります。
すみません。m(__)m

「TextRange」についてもう少し調べてみます。
どうもありがとうございました。>ALL

[上に] [前に] [次に]