同時に同じ文字を入力したい方法は?

このQ&Aのポイント
  • JavaScriptを使って、二つの投稿欄に同じ文字を入力する方法を知りたいです。試した方法ではうまくいかなかったので、他に良い方法があれば教えてください。
  • 投稿欄(1)にだけ入力しても、投稿欄(2)には何も表示されませんでした。どうすれば、二つの投稿欄の内容を同期させることができるでしょうか。
  • 掲示板の仕様上、投稿欄(1)と投稿欄(2)は<input name="name">の部分が必須で変更できません。解決方法を教えてください。
回答を見る
  • ベストアンサー

二つの入力欄に、同時に同じ文字を入力したい

掲示板の投稿欄を、 「お手軽版(投稿欄(1))」と 「本格版(投稿欄(2))」の二種類を用意したいと思っています。 JavaScriptを使って、 例えば、投稿欄(1)に名前を入力したら、 同じ文字列が投稿欄(2)にも反映されるようにしたいのですが、 どのようなコードを書けば良いでしょうか。 似たような質問を調べたのですが、 (1)を<input name="A">、(2)を<input name="B">としてAをBにコピーするというものがありました。 試してみると確かに同じ文字列が入力されるのですが、肝心の投稿ができませんでした。 掲示板の仕様上、 (1)も(2)も<input name="name">の部分は必須で、変えられないようなのです。 ちなみに(1)にだけ入力して(2)が空欄だと、空欄として処理されてしまいます。 <form>タグも一つしか使えません。 一晩色々やってみてどうしても上手くいかず、 最後の手段として、こちらでご教授願えればと思い、お伺いしました。 説明がヘタで申し訳ないのですが、不足な点は仰って下さい。 どうぞよろしくお願いいたします。

この投稿のマルチメディアは削除されているためご覧いただけません。

質問者が選んだベストアンサー

  • ベストアンサー
  • DoubtOwl
  • ベストアンサー率50% (63/124)
回答No.5

動くと思うんですがね・・・ nameCとnameDが逆になってるのかも? 下記と比較してください。 function copyToC() { var nameC = document.getElementById("nameC"); var nameD = document.getElementById("nameD"); nameD.value = nameC.value; } function copyToD() { var nameC = document.getElementById("nameC"); var nameD = document.getElementById("nameD"); nameC.value = nameD.value; } ※余談 スクリプトをシンプルにしたいなら下記でもOK タグ <input name="name" id="nameA" onkeyup="copyTo('nameA','nameB')"> <input name="name" id="nameB" onkeyup="copyTo('nameB','nameA')"> <input name="name" id="nameC" onkeyup="copyTo('nameC','nameD')"> <input name="name" id="nameD" onkeyup="copyTo('nameD','nameC')"> スクリプト function copyTo(fromId, toId) { var fromTag = document.getElementById(fromId); var toTag = document.getElementById(toId); toTag.value = fromTag.value; }

lineboe
質問者

お礼

素晴らしい! 新しく教えていただいたシンプル版で、完璧に動作いたしました! 今回は度重なる質問にお答えいただき、ご迷惑をお掛けしました。 そして、本当にありがとうございました。 感謝・感謝の一言です。 私もこのように「やりたい事」が自力で解決できるよう、精進したいと思います。 本当に、大変お世話になりました。

その他の回答 (4)

  • DoubtOwl
  • ベストアンサー率50% (63/124)
回答No.4

確認してみたところInternetExplorerだと妙な動きをするようですね。 いっそこうしましょうか。 IDを追加しても問題ないでしょうし。 タグ <input name="name" id="nameA" onkeyup="copyToB()"> <input name="name" id="nameB" onkeyup="copyToA()"> スクリプトは下記。 function copyToB() { var nameA = document.getElementById("nameA"); var nameB = document.getElementById("nameB"); nameB.value = nameA.value; } function copyToA() { var nameA = document.getElementById("nameA"); var nameB = document.getElementById("nameB"); nameA.value = nameB.value; }

lineboe
質問者

補足

素晴らしいです!完璧に同期しました。 本当にありがとうございます! こちらを「ペンネーム<name="name">」と「本文<name="sub">」 の両方の入力欄に適用させたくて、上記コードに習ってスクリプトにnameCとnameDを追加し、 二つの「本文」のタグに <input name="name" id="nameC" onkeyup="copyToD()"> <input name="name" id="nameD" onkeyup="copyToC()"> のように追記して適用させようとしたのですが、うまく動きませんでした。 そんなに単純ではないのですね・・・ ここまで教えて頂いて、 ここからの応用は初歩的な事なのかもしれずお恥ずかしい限りですが、 二つの入力欄をそれぞれ同期させるには、どのようにすれば良いのでしょうか。 是非ともお力をお貸し頂けたら嬉しいです。

  • DoubtOwl
  • ベストアンサー率50% (63/124)
回答No.3

先に書いたものは余計な行がありましたね。 ムダも多かったので下記でどうぞ タグは下記にする。 <input name="name" onkeyup="namecopy(this)"> スクリプトは下記。 function namecopy(tag) { // name="name"のタグを全て取得 var names = document.getElementsByName("name"); // 入力文字(tag.value)を全てのname="name"のvalueにいれる for (var i = 0; names.length > i; i++) { names[i].value = tag.value; } }

lineboe
質問者

補足

再びの回答、本当にありがとうございます。 試させていただいたところ、見事にリアルタイムに同期しました! ・・・のですが今度は、 半角英数での入力は、本当に素晴らしく理想通りの同期をしてくれるのですが、 日本語入力で文字を打とうとすると、問題が発生してしまいました。 例えば日本語入力で「今日は晴れ」と打ちたい時に、 「今日は」とまず打って、続けて「晴れ」と打とうとすると、 「今日は」が上書きされて、「晴れ」だけが残ってしまう、という状態になりました。 どうやら、日本語入力の場合は「最後に入力した文字」だけがフォーム内に残る、 という状態のようです。 一応私も素人なりに原因を探ろうとしたのですが、 結局さっぱり分からずじまい・・・ こう何度もお尋ねして申し訳ない気持ちになってきますが、 もし何か改善策がございましたら、お力をお貸し頂けたら幸いです。

  • DoubtOwl
  • ベストアンサー率50% (63/124)
回答No.2

他にも<input name="name">のタグがある場合は使えませんが・・・ (1)と(2)の<input name="name">を <input name="name" onkeyup="namecopy()">として javascriptが function namecopy() { // name="name"のタグを全て取得 var names = document.getElementsByName("name"); var copyValue = ""; // 入力されている文字を取得 for (var i = 0; names.length > i; i++) { if(names[i].value != "") { copyValue = names[i].value; break; } } // 取得した文字を全てのname="name"のvalueにいれる for (var i = 0; names.length > i; i++) { if(names[i].value != "") { names[i].value = copyValue; } } }

lineboe
質問者

補足

とても具体的な回答ありがとうございます! さっそく試してみました。 すると見事にコピーされるにはされる・・・のですが、 リアルタイムな同期(1のフォームに文字を打つと同時に2にも反映される)ではなくて、 2のフォームにワンアクション(なんでもいいから文字を打つとか)しないと同期しないようでした。 ワンアクションを加えた後はリアルタイムに同期するのですが・・・ 具体的なコードまで書いていただいて本当にありがとうございます。 欲張りな質問になってしまいますが、 ワンアクションを加えることなく、最初からリアルタイムな同期というのは難しいものでしょうか? もしもいい方法がありましたらご教授願えたら嬉しいです。

noname#247307
noname#247307
回答No.1

>掲示板の仕様上、 >(1)も(2)も<input name="name">の部分は必須で、変えられないようなのです。 >ちなみに(1)にだけ入力して(2)が空欄だと、空欄として処理されてしまいます。 ><form>タグも一つしか使えません。 ということは、あなたが作った掲示板ではなく、どこかの掲示板プログラムを利用しているということですね。 「<input name="name">の部分は必須で、変えられない」「<form>タグも一つしか使えません」ということであれば、素直に考えれば「掲示板のフォームは1つしか設置できない」ということになるでしょう。それを踏まえて解決策を考えるなら。 1. 掲示板のプログラムを書き換えて対応する。 2. フォームを1つだけで済むように対応する。 このいずれかになるでしょう。 プログラムが変更できれば、1の掲示板の処理を変更することで、「<input name="B">としてAをBにコピーする」というやり方ができるようになるでしょう。 それが無理なら、例えば本格版のフォームのみを用意し、必要に応じて不要な項目を非表示にして簡易版の表示にする、というようにして、1つのフォームで簡易版と本格版が切り替わるような方法が考えられるでしょう。

lineboe
質問者

補足

回答ありがとうございます。 すみません、大事な部分を書き忘れていました、レンタル掲示板です。 なので提示して頂いた1の方法は恐らく無理だと思いますが、 2の方法はとても良さそうです。調べてみたいと思います。

関連するQ&A

  • 複数の入力欄についての入力チェック

    JAVAScriptを勉強し始めたものです。 よろしくお願いします。 1つのページに複数のフォームと入力欄があります。 それぞれの入力欄は数字を入力することになっていて、その数字が1~90の間にあるかどうかをチェックしたいと考えています。 下記のようなページを見ると、一つ一つの入力欄について、IF文でチェックしているのですが、一括してチェックするようなことは可能ですか? http://www.tagindex.com/javascript/form/check1.html ----------------------------------------- 【以下に、やりたいことの例を示します】 <script type="text/javascript"> <!-- function matchNum() { n=eval(document.myFORM1.myTEXT1.value); // ←この行の「myFORM1」と「myTEXT1」をすべてを網羅するように書き換えられないか? if ( n < 1 || n > 90 ) { alert("入力できるのは、1~90の値です。"); } } // --> </script> <FORM METHOD="GET" name="myFORM1"> <INPUT TYPE="text" NAME="myTEXT1" onblur="matchNum()"> <INPUT TYPE="text" NAME="myTEXT2" onblur="matchNum()"> <INPUT TYPE="text" NAME="myTEXT3" onblur="matchNum()"> </FORM> <br> <FORM METHOD="GET" name="myFORM2"> <INPUT TYPE="text" NAME="yourTEXT1" onblur="matchNum()"> <INPUT TYPE="text" NAME="yourTEXT2" onblur="matchNum()"> <INPUT TYPE="text" NAME="yourTEXT3" onblur="matchNum()"> </FORM> <br> <FORM METHOD="GET" name="myFORM3"> <INPUT TYPE="text" NAME="hisTEXT1" onblur="matchNum()"> <INPUT TYPE="text" NAME="hisTEXT2" onblur="matchNum()"> <INPUT TYPE="text" NAME="hisTEXT3" onblur="matchNum()"> </FORM> <br> <FORM METHOD="GET" name="myFORM4"> <INPUT TYPE="text" NAME="herTEXT1" onblur="matchNum()"> <INPUT TYPE="text" NAME="herTEXT2" onblur="matchNum()"> <INPUT TYPE="text" NAME="herTEXT3" onblur="matchNum()"> </FORM>

  • パスワード欄の"●"文字を小さくしたい

    お世話になります。 Windows XP + IE6の組み合わせでHTMLのパスワード入力欄に"●"文字が入力中に表示されますが、この"●"文字のフォントサイズを変更(小さく)する方法はありますでしょうか? ID/パスワード入力欄がありましてそれぞれ文字を入力するのですが、パスワード入力中の"●"文字フォントサイズがやたらと大きいのです。 スタイルシートを使って何とかなりそうなのですがご存じの方おられましたらお教えください。 <input type="text" name="userId" maxlength="16" size="16"> <input type="password" name="password" maxlength="16" size="16">

    • ベストアンサー
    • HTML
  • 指定のinputに入力

    恐れいります。 <form action="./xxx.cgi" method="POST"> <input type="text" name="name1"> <input type="text" name="name2"> <input type="text" name="name3"> <input type="text" name="name4"> <input type="text" name="name5"> <input type="submit" value="送信"> </form> と、5つの入力欄があり、別ウィンドウから、指定の場所に代入することは可能でしょうか。例えば、name1のエリアに、別ウィンドウからformで「test」という文字を送信して入力する感じです。 よろしくお願いします。

  • 文字入力の初歩的な疑問にお答えください

    以下のコードで、文字入力変数(tx3) を他のページでも共用するために 文字入力目的の function textout() を 外部ファイル化したいのですが 方法が分かりません。 入力欄と同じページに、入力された文字列を確認のために、 入力窓を消さずに表示するために、なるべく変数を使用する形で エレメントにあまり依存せずにこの目的を達成する方法を教えて下さい。 できれば、一つのページに4つくらいの入力欄を設けたいため、 具体的なスクリプトを例示していただければ助かります。 <html> <head> <script type="text/javascript"> function textout(){ if (document.getElementById){ var tx3 = document.form1.text1.value; document.getElementById("output").innerHTML=tx3; }} </script> </head><body> <form name="form1"> <textarea name="text1" cols="50" rows="4"></textarea> <br> <input type="button" onClick="textout()" value="verify"> </form> <div id="output"></div> </body> </html>

    • ベストアンサー
    • HTML
  • 一括文字列変換

    $FORM{'color'} $FORM{'background'} $FORM{'name'} $FORM{'title'} $FORM{'comment'} 上記に文字列(例)「a」が入力された場合に「b」に変換したいのですが、一括で変換する場合は $val =~ s/a/b/g; とすればできます。 ただ、$FORM{'comment'}と$FORM{'title'}には変換を反映させたくないのですが、この場合はどのようにすればいいのでしょうか? $FORM{'color'} =~ s/a/b/g; $FORM{'background'} =~ s/a/b/g; $FORM{'name'} =~ s/a/b/g; と一つ一つ設定するしかないのでしょうか?変換したい文字列が莫大にありますので、出来れば一括でできれば助かります。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Javaのフォームの入力欄に文字を貼り付けたい

    VB.NETとWindowsXP、IEなのですが、 <input type="file" size=30 name=FILE value="*.txt"> のような設定がされたテキストボックス内に IE.document.Forms(0).Elements("FILE").value = "c:\a.txt" として文字を貼り付けるにはどうしたらよいでしょうか? 別の欄のinput type="text"になっているもので試してみたら 正常に貼り付けられたのですが、fileとなっている場合は この方法では出来ませんでした。 ブラウザ上では手動で普通に入力して使用できるようになっています。 何か良い方法を教えて頂けると助かります。 よろしくお願いいたします。

  • 他フォームの入力データの引継ぎ

    入力フォームを2つ用意し 第1フォームの入力欄の1部を第2フォームの入力欄のデータとして submitさせたいのですが <INPUT TYPE="radio">と<SELECT>の入力値がうまく引継げません。 下記のようなJavaスクリプトとHTMLなのですが Javaスクリプトで「value」を=にすると 「radio」のほうはundefin、 「SELECT」で複数選択した場合は、一つ目の選択肢のみしか 引継げませんでした。 Javaスクリプトでうまくいく方法がありましたら ご教示ください。 ----Javaスクリプト-------------------------------- function aaa() { document.FROM2.A.value = document.FROM1.A.value; document.FROM2.B.value = document.FROM1.B.value; document.FROM2.C.value = document.FROM1.C.value; document.FROM2.submit(); } ----HTML-------------------------------- <FORM NAME="FROM1" METHOD="POST" ACTION="***"> <SELECT NAME="A" MULTIPLE> <OPTION VALUE="aa">セレクトa <OPTION VALUE="bb">セレクトb <OPTION VALUE="cc">セレクトc <OPTION VALUE="dd">セレクトd </SELECT> <INPUT TYPE="radio" NAME="B" VALUE="" CHECKED>選択なし <INPUT TYPE="radio" NAME="B" VALUE="1" CHECKED>ラジオ1 <INPUT TYPE="radio" NAME="B" VALUE="2" CHECKED>ラジオ2 <INPUT TYPE="text" NAME="C"> <INPUT TYPE="text" NAME="D"> <INPUT TYPE="submit" NAME="OK_BTN" VALUE="OK"> </FORM> <FORM NAME="FROM2" METHOD="POST" ACTION="***"> <INPUT TYPE="hidden" NAME="A"> <INPUT TYPE="hidden" NAME="B"> <INPUT TYPE="hidden" NAME="C"> <INPUT type="button" onClick="JavaScript:aaa();" name="OK_BTN" value="OK"> </FORM>

  • 入力に関して。

    以下のソースのようにテキストボックスを4つくらい並べて、最大入力文字数になったら、自動的に右のテキストボックスに入力できるようにすることはできるのでしょうか? <html> <head> <title></title> </head> <body> <form name="form1"> <input type="text" name="txt1" size="7" maxlength="3">. <input type="text" name="txt2" size="7" maxlength="3">. <input type="text" name="txt3" size="7" maxlength="3">. <input type="text" name="txt4" size="7" maxlength="3"> </form> </body> </html>

  • エクセルで、空欄と特定文字に対応した入力設定

    エクセル2007を使っています。 A欄に品名を記入した時、B欄に価格を以下のように自動的に記入させたいです。 A欄が空白の時、B欄も空欄、 A欄に”ねこ”または”いぬ”という文字が含まれている時、B欄に50 A欄がそれ以外の文字列だけの時、B欄に100 ...と記入させたいのですが、B欄にどのような関数を設定すればよいですか? どうぞ教えてください。よろしくお願いします。

  • ラジオボタンとテキストを同時にグレーアウトさせる

    <input type=radio name="1" value = 'A1'">A1<br> <input type=radio name="1" value = 'A2'">A2<br> <input type=radio name="1" value = 'A3'">A3<br> <input type=radio name="1" value = 'A4'">A4<br> <input type=radio name="1" value = 'A5'">A5<br> <form> <input type=radio name="tex" onClick="textform.textin.value = 'B1'">B1<br> <input type=radio name="tex" onClick="textform.textin.value = 'B2'">B2<br> <input type=radio name="tex" onClick="textform.textin.value = 'B3'">B3<br> <input type=radio name="tex" onClick="textform.textin.value = 'B4'">B4<br> <input type=radio name="tex" onClick="textform.textin.value = 'B5'">B5<br> </form> <form id="textform" action="#"> ここに文字が表示されます <input id="textin" type="text" size="30"> </form> A1を選択した場合、B2とB4とテキストエリアをグレーアウトさせる A2を選択した場合、B3とテキストエリアをグレーアウトさせる この記述の方法がわかりません。 初心者ですので、どなたかご教授おねがいします。

専門家に質問してみよう