![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんにちは。以下、ご回答いただければ幸いです。
日頃、PHPカテゴリにてお世話になっておりますが、以下のようなものを作りたいと考えているのですが、その流れ(仕組)が分からず、
http://oshiete1.goo.ne.jp/qa2749334.html
にて同じような質問があったので、今回javascriptにて投函させていただきました。宜しくお願いいたします。
上記、URLと同じなのですが、流れのイメージとして、テキストエリアに文字を入力している際、入力途中でテキストエリア外に設置のボタン(アイコンなど)を押したとき、その押したボタンに埋め込んである?記号などを、テキストエリアでの入力途中に引き継いで記号文字列を代入したいと考えています。
適切な説明が上手く出来ないのですが、例えば、テキストエリアにおいて、
こんにちは
と入力したとき、テキストエリア外に設置のボタンを押すことで、
こんにちは[a:1]
と、このようにしたいのです。
色々なイメージを描いておりますが、テキストエリア内にカーソルがあるとき、一旦テキストエリアの外のボタンを押して、また元のカーソルの位置に戻すには?とか、ボタン(アイコン)に設定の記号文字列を代入するには?と、一向に具体的なイメージがつかめずにいる次第です。
お忙しい中恐縮ですが、ご指導頂戴出来れば幸いです。宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
親ページにはテキストエリアと小ウィンドウを開くボタンがある
親ページにあったボタンを押すと絵文字一覧が開かれる
その絵文字画像をクリックすると親ページのテキストエリアに挿入される
なお、挿入される場所は現在のカーソル位置であること
こんな感じでしょうか?
大分昔に作ったソースがあるので、参考程度にどうぞ
parent.php
<head>
<title></title>
<script language="javascript">
<!--
function EmojiSub()
{
window.open("icon.php?fname=fm1&txname=tx1","","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=250");
}
//-->
</script>
</head>
<FORM><INPUT type="button" name="btnShowChild" value="絵文字一覧" onClick="EmojiSub()">
</FORM>
<FORM name="fm1"><TEXTAREA rows="20" cols="50" name="tx1"></TEXTAREA></FORM>
icon.php
<?php
$fname = $_GET['fname'];
$txname = $_GET['txname'];
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<meta http-equiv="content-type" content="text/html; charset=utf-8"></meta>
<TITLE>絵文字サブウィンドウ</TITLE>
<script language="javascript">
<!--
function SetMsg(nValue){
tagInsert('【a:' +nValue+ '】');
}
function tagInsert(string)
{
var insert = string;
if (insert == 'default') return;
<?php print("var tarea = window.opener.document.getElementById('".$txname."');");?>
<?php print("window.opener.document.".$fname.".".$txname.".focus();");?>
if (/*@cc_on!@*/false) { // IE
var sel = window.opener.document.selection.createRange();
sel.text = insert;
} else {
<?php print("var body = window.opener.document.".$fname.".".$txname.".value;\n");?>
<?php print("var at = window.opener.document.".$fname.".".$txname.".selectionStart;\n");?>
<?php print("var tmp = body.substr(0, at);\n");?>
<?php print("window.opener.document.".$fname.".".$txname.".value = tmp + insert + body.substr(at, body.length);\n");?>
<?php print("var cursor = insert.length + at;\n");?>
<?php print("window.opener.document.".$fname.".".$txname.".setSelectionRange(cursor, cursor);\n");?>
}
}
//-->
</script>
</HEAD>
<BODY>
<P align="center">挿入したい絵文字をクリックしてください</P>
</P>
<?php
$Cnt = 0;
// 絵文字配列作成(使用する画像の拡張子前の番号です。この辺は改良の余地)
$array = array("1","2","3","4"……);
for($i=0;$i<count($array);$i++){
$Cnt++;
//横に並べる絵文字の数
if($Cnt>20){
print("<br>");
$Cnt = 1;
}
//ここで絵文字を実際に表示。
print("<a href=javascript:SetMsg('".$array[$i]."')><img src=pic/".$array[$i].".gif border=0></a>");
}
?>
</BODY>
絵文字クリックされると[i:番号]を挿入する形式です。
幾つか<html>等省略してます。
これとは別に画像用のフォルダをつくり、番号.gif形式の画像を用意してください。
tuki_yuki様
はじめまして、こんにちは。
貴重なソースまでご提示いただき、ありがとう御座います。
>こんな感じでしょうか?
はい!全くその通りでソースを実行させて頂いたときには感動さえしました。これまで全くといって良いほど、その流れのイメージが付かなかったもので・・。
すぐに完成という状況ではないため、これから途中躓くかもしれませんが、随分と開けたような感覚です。有難う御座いました。
No.2
- 回答日時:
>具体的なイメージがつかめずにいる次第です。
まずロジックを熟考すべきかと。
この場合ですと
1. キャレットの位置情報取得
2. テキストエリア内に現在存在する文字列を取得
3. 2で取得した文字列の1の位置情報へ文字列を挿入
4. 3で生成した文字列をテキストエリアに突っ込む
5. フォーカスをテキストエリアへ設定する
となります。
jsを一通りこなしていれば2,3,4,5は簡単かと思います。
>2. 4.
getElementById('テキストエリアID').innerHTML
>3.
いろいろありますが当方はsubstr()を使うのが好きです。
>5.
getElementById('テキストエリアID').focus();
>設定の記号文字列を代入するには?
突っ込む文字列を引数で渡すようにするのが一番楽かと思われます。
で、曲者なのが1.なのですけれども、
これは以下のURLが参考になるかと思います。
http://d.hatena.ne.jp/brazil/20061021/1161377936
既存のライブラリとしてSelection.jsというのもあるようなので
そちらも参照すると良いでしょう。
wp_様
こんにちは。お世話になっております。(随分と前にアドバイスをいただきました)
これまでjavascriptにあまり縁がなく、全てが新たに始めるような感覚ですが、考える上での流れをアドバイスいただき有難く思っております。
この度は有難う御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
- JavaScript 空白で入力フォームのボタンをクリックしたら、ブラウザの上部からjavascriptで 表示されるアラ 1 2022/05/20 11:16
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- gooブログ Twitterの動画画面をgooブログに埋め込めない 4 2022/06/03 16:40
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- gooのスマホ スマホF-51Bに緊急時情報画面でロックが掛かって解除できません。 3 2023/06/18 23:05
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- その他(動画サービス) TVerでPINコードを求められてログイン出来ない。 AndroidTVであらかじめスマホアプリやP 2 2023/07/17 13:33
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptでiframeの内容を「...
-
フォーカス移動抑止について
-
HTMLのソースの取得・正規表現
-
javascript内でのhtmlのID取得
-
初投稿です!javascriptで質問...
-
designModeをOnにしたインライ...
-
getElementsByNameで要素が取得...
-
Javascript 間違っている箇所...
-
SCRIPT5007: 未定義または NULL...
-
日数カウントダウンをホームペ...
-
ページ全体を検索して特定文字...
-
idHOGEで取得したinnerText(数...
-
数字の足し算が出来ないのです...
-
<body>タグを書き換えたい
-
classNameにメゾットを追加したい
-
何度もリピートする、カウント...
-
引数付きで呼び出す関数・配列...
-
DOMで生成したタグにCSSが適用...
-
テキストやリンクの表示・非表示
-
JavaScriptでの西暦下2桁での表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
function の return 値を表示し...
-
getElementsByNameで要素が取得...
-
SCRIPT5007: 未定義または NULL...
-
JavaScriptでiframeの内容を「...
-
フォーカス移動抑止について
-
キーを押している間の時間を計...
-
JavaScript でキーを送る
-
bodyタグのfocus
-
ボタンのID名を取得するには?
-
JavaScriptでのEnterキーとAlt+...
-
リンク移動先のURLを取得
-
初心者javascript ウィンドウサ...
-
自動ジャンプでフォームデータ...
-
乱数を一定時間毎に表示させた...
-
jQuery ツールチップの中のリンク
-
idHOGEで取得したinnerText(数...
-
フレームサイズの変更について
-
AjaxでDBから取得したデータを...
-
JavaScriptでの西暦下2桁での表...
-
ページ全体を検索して特定文字...
おすすめ情報