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

別ウインドウから、textarea内のカーソル位置に文字を挿入。

お世話になっております。
やりたいことは、以下のような感じです。



2つのウインドウ(ページA、ページB)があります。

ページAには、textareaがあります。
textareaにデータを入力後、
マウスでtextarea内のデータの特定の位置をクリックし、
カーソルを置いておきます。

この状態で、ページAにあるコマンドボタンをクリックすると、
ページBが開きます。

ページBには、いくつかコマンドボタンが表示されていて、
このうち、どれか1つをクリックすると、
ページBが閉じられ、かつ、
ページBで選択したコマンドボタンに設定されている値が、
ページAのtextarea内のカーソル位置に挿入される。




・・・以上のような感じのことをやりたのです。


ページA内のコマンドボタンからページBを開くのは、
windows.open(URL)
で開くことができました。

ページBでコマンドボタンを選択した際、
window.close()
でページBを閉じるところまではできたのですが、
値をページAのtextareaに挿入するところが、うまくいきません。

(↓こんな感じなのかと思うのですが・・・)
window.close();
var str1 = document.getElementById(textareaのid).value;
var str2 = "aaa"; // 挿入したい値
var p = document.getElementById('textareaのid').selectionStart;
document.getElementById(textareaのid).value = str1.substr(0, p) + str2 + str1.substr(p, str1.length);


どなたかご教授願います。
よろしくお願いします。

A 回答 (1件)

ページAはwindow.openerで参照できますので、


こういう具合でやってみたらいいんじゃないでしょうか。

<script type="text/javascript">
<!--
function hoge(o){
//ページAのtextareaのidを"sample"とする
var sample = window.opener.document.getElementById("sample");
var str1 = sample.value;
var str2 = o.value; //たとえば押されたbuttonのvalue
var p = sample.selectionStart;
sample.value = str1.substr(0, p) + str2 + str1.substr(p, str1.length);
window.close();
}
//-->
</script>
</head>
<body>
<button type="button" value="aaa" onclick="hoge(this);">aaa</button>
<button type="button" value="bbb" onclick="hoge(this);">bbb</button>
</body>
</html>

この回答への補足

あと、textareaで挿入場所を指定する際、
クリックでの位置指定だけでなく、
範囲指定(ドラッグ)して、その範囲に、挿入する値を入れ替えたいのですが。

↓こんな感じでやるのかと思うのですが、うまくいきません。
document.getElementById("osi1_f").focus();
var text=getSelectText();
document.selection.createRange().text = "";

併せてご教授いただければ、大変ありがたいのですが。
よろしくお願いします。

補足日時:2010/08/07 12:26
    • good
    • 0
この回答へのお礼

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

ご助言のとおり、
window.opener.document.getElementById("sample");
を使えば、別ウインドウに値を渡せることは、わかりました。

ただ、実行した結果は、
挿入したい値が、そのtextareaの最後尾に挿入され、
かつ、
さらに、その後ろに、もう一度、
textarea内のデータが挿入されてしまいました。


現在、対応を検討中です。

まずは、御礼まで。

お礼日時:2010/08/07 11:55

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