JavaScriptで文字を入力して返すロジックを実装する方法

このQ&Aのポイント
  • JavaScriptのロジックを使用して、文字を入力して返す方法について説明します。
  • 具体的なコード例を示しながら、入力ボックスを作成して文字の入力・返却を行う方法を解説します。
  • また、文字の返却が行われない場合の原因と解決方法についても説明します。
回答を見る
  • ベストアンサー

javascript

ある文字を入力して、文字を返すロジックですが、 ボックスを作成して入力を行いたいです。 以下のロジックだと、hogeのvalueに文字を入力すると、文字はボックスに返されますが、 valueをスペースにして、value="" htmlで画面上で、文字を入力して、submitを実行しても、文字は返されません。 文字が引き渡されたないのが原因だと思われますが、 submitでどのようにして文字を引き渡してよいか、教えて頂けないでしょうか。 宜しくお願いします。 <form id="sample"> <input type="text" id="hoge" name="hoge" value="pass" size="30"> <input type="text" id="foo" name="foo" value="" size="100"> <INPUT type="submit" value="変換"> <script language="javascript"> (function () { function test(p){var 省略 charAt(i);}return s;} var elements = document.getElementById('sample').elements; elements['foo'].value = test(elements['hoge'].value); }()); </script>

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

  • ベストアンサー
noname#212058
noname#212058
回答No.2

回答 No.1 です。 > 肝心のボックスの中身は、どちらもスペースになってしまいます。 データが Submit できないという質問ではなく、 INPUT ボックスが空になるという問題に対する質問だったのですか。それは今の実装方式で解決するのは難しいです。 INPUT ボックスが空になる原因は『Submit によってページが再読み込みされる』ためです。つまり、Javascript でボックスにデータを記入しても、Submit によってページが再読み込みされて、「最初の INPUT ボックスが空のページ」で上書きされてしまうために発生します。 これを回避するためには、以下のような対処を取るほうほうが考えられます。 A案) Submit を使用せずに、Ajax (jQuery) などを使用してサーバにデータを送る   (ページの再読み込みが発生しないようにする) B案) 問題のページを PHP などを使用した動的ページに直し、    再読込み時には value 値をセットした HTML を作るようにする

yodogou
質問者

お礼

原因がわかりました、有難う御座います。 A案で対処したいと思います。有難う御座いました。

その他の回答 (1)

noname#212058
noname#212058
回答No.1

以下のようにすれば、foo にデータをコピーしてsubmit するようになります。 ポイントは <INPUT type="submit"> 要素に onclick を追加して、ボタン押下時に foo にデータを投入するコードが動くようにしたところでしょうか。 <form id="sample"> <input type="text" id="hoge" name="hoge" value="" size="30"> <input type="text" id="foo" name="foo" value="" size="100"> <INPUT type="submit" onclick="executeTest();" value="変換"> <script language="javascript"> function executeTest() { function test(p){ return p; } var elements = document.getElementById('sample').elements; elements['foo'].value = test(elements['hoge'].value); } executeTest(); </script>

yodogou
質問者

補足

返信有難う御座います。 上記同じように組みなおしたつもりなのですが、 結果、get機能と同じように、 アドレスが ~.htm?hoge=test&foo=省略 とこのようになり、これで良いのかもしれないですが、 fooの中身は変換された文字が入ってましたが、 肝心のボックスの中身は、どちらもスペースになってしまいます。 私が何か間違ったでしょうか。

関連するQ&A

  • Javascriptでフィールドを埋める方法

    Javascript初心者です。 HTML <input type="text" id="hoge" value="piyo"> <input type="checkbox" onclick="AutoFill();" > <input type="text" id="foo" value=""> Javascriptでcheckboxをクリックすると、fooというidを持つテキストフィールドの値をhogeというidを持つテキストフィールドと同じ値で埋めたいと思います。 bodyの終りに <script> AutoFill(){ document.elementGetById(foo).value=document.elementGetById(hoge).value; } </script> checkboxをクリックしても何も起こらない。どうすればいいんですか。 ご回答をよろしくお願いいたします。

  • JavaScriptでの変数で数値を使った場合の疑問

    JavaScriptでの変数で数値を使った場合の疑問 <form action="sample.cgi" name="fm"> <button onclick="allInput()">全入力</button> <input size="10" type="text" name="hoge1" value=""> <input size="10" type="text" name="hoge2" value=""> <input size="10" type="text" name="hoge3" value=""> ・・・・ <input size="10" type="text" name="hoge30" value=""> </form> 上記のようなフォームがあったとします。 hoge1~hoge30まであるためにうけとる方法をforで受け取りたいのです。 <script Language="JavaScript"> function allInput() { for ( var i = 1; i <=30; i++ ) { document.fm.hoge+i.value = document.fm.hoge1.value; //上のiのところで1から30を文字列としたい } } </script> 内部的には document.fm.hoge2.value = document.fm.hoge1.value; document.fm.hoge3.value = document.fm.hoge1.value; document.fm.hoge4.value = document.fm.hoge1.value; ・・・ document.fm.hoge30.value = document.fm.hoge1.value; のようになっていきばいいのですが・・・ たとえになるかわかりませんが、Perlだと下のように$iの変数を文字列として扱えるのですが・・・ for ($i=1;$i <= 30; $i++){ ${"sample$i"} = param("hoge$i"); } よろしくお願いいたします。

  • JavaScriptの計算のNaNの判定について…

    いろいろなアドバイスを参考に以下のようなプログラムを作り、値が正の時はちゃんと計算されるのですが負の時はNaNと判定されてしまいます。どうしたら負の場合でもちゃんと計算されますか?いろいろ調べたのですが見つかりませんでした…。よろしくお願いします。 <html> <body> <script type="text/javascript"> var rslt1 = 0; var rslt2 = 0; var rslt3 = 0; function hoge1(){ var a=document.getElementById('a').value; var b=document.getElementById('b').value; var rslt; if (a==1 && b==1) { rslt1=-100; } else { if (a==1 && b==2) { rslt1=-90; } else { if (a==2 && b==1) { rslt1=-80; } else { rslt1=-70; }}} document.getElementById('txt1').value=rslt1; sum1(); } function hoge2(){ var a=document.getElementById('a').value; var c=document.getElementById('c').value; var rslt; if (a==1 && c==1) { rslt2=-95; } else { if (a==1 && c==2) { rslt2=-85; } else { if (a==2 && c==1) { rslt2=-75; } else { rslt2=-65; }}} document.getElementById('txt2').value=rslt2; sum1(); sum2(); } function hoge3(){ var a=document.getElementById('a').value; var d=document.getElementById('d').value; var rslt; if (a==1 && d==1) { rslt3=-60; } else { if (a==1 && d==2) { rslt3=-50; } else { if (a==2 && d==1) { rslt3=-40; } else { rslt3=-30; }}} document.getElementById('txt3').value=rslt3; sum2(); } function sum1() { document.getElementById('txt4').value=rslt1 + rslt2; } function sum2() { document.getElementById('txt5').value=rslt2 + rslt3; } function sum3() { document.getElementById('txt6').value=((document.getElementById('txt4').value + rslt2 + document.getElementById('txt5').value * 2) / 4); } </script> <select id="a" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="b" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="c" onChange="hoge2()"> <option value="1">1<option value="2">2 </select> <select id="d" onChange="hoge3()"> <option value="1">1<option value="2">2 </select><p> <input type="text" id="txt1" value=""><p> <input type="text" id="txt2" value=""><p> <input type="text" id="txt3" value=""><p> <input type="text" id="txt4" value=""><p> <input type="text" id="txt5" value=""><p> <input type="text" id="txt6" value=""><p> </body> </html>

  • 2つのjavascriptを組み合わせたい

    フォームメール用の2つのjavascriptがあります。 ●2重送信防止とデータ送信後指定ページへ遷移するjavascript ●テキストボックスが空欄だった時にアラートを表示するjavascript の2つです。 この2つを組み合わせようとしたのですが、うまく動きません。 ご指導いただきたくお願いいたします。 *************************************************** 【●2重送信防止とデータ送信後指定ページへ遷移するjavascript】【動きます】 送信ボタン押下後、2重送信を防止しながら、データ送信後は「location.href = "finish.html"」でfinish.htmlを表示します。 <script type="text/javascript" src="js/jquery.js"></script> <script> jQuery(function($) { $('#form1').submit(function(event) { // HTML送信キャンセル event.preventDefault(); //フォーム要素取得 var $form = $(this); // 送信ボタンを取得 // (後で使う: 二重送信防止) var $button = $form.find('button'); // 送信 $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize() + '&delay=1', timeout: 10000, // 送信前 beforeSend: function(xhr, settings) { // ボタン無効二重送信防止 $button.attr('disabled', true); }, // 応答後 complete: function(xhr, textStatus) { // ボタン有効再送信許可 $button.attr('disabled', false); }, // 通信成功処理 success: function(result, textStatus, xhr) { // 入力値初期化 $form[0].reset(); location.href = "finish.html"; }, // 通信失敗処理 error: function(xhr, textStatus, error) { alert('retry');} }); }); }); </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信A"> </form> *************************************************** 【●テキストボックスが空欄だった時にアラートを表示するjavascript】【動きます】 テキストボックスが空欄だったらアラートを表示します。 <script> function check3() {   var tel3 = document.form1.tel.value;   var fax3 = document.form1.fax.value;   var isValid = true;   if (!tel3) {     alert("電話未入力");     isValid = false;   }   if (!fax3) {     alert("FAX未入力");     isValid = false;   }   if (!isValid) {     return;   }   document.form1.submit(); } </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信B" onclick="check3();"> </form> *************************************************** 【上記の2つを組み合わせてみました。】【動きません】 テキストボックスが空欄だったらアラートを表示しながら2重ボタン排除&finish.htmlに遷移というものです。 【結果】 「問題なく動くjavascript」2つを単純に組み合わせただけなのですが、 finish.htmlに遷移せずinsert.phpが表示されます。ご指導宜しくお願いします。 <script type="text/javascript" src="js/jquery.js"></script> <script> jQuery(function($) { $('#form1').submit(function(event) { event.preventDefault(); var $form = $(this); var $button = $form.find('button'); $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize() + '&delay=1', timeout: 10000, beforeSend: function(xhr, settings) { $button.attr('disabled', true); }, complete: function(xhr, textStatus) { $button.attr('disabled', false); }, success: function(result, textStatus, xhr) { $form[0].reset(); location.href = "finish.html"; }, error: function(xhr, textStatus, error) { alert('retry');} }); }); }); </script> <script> function check3() {   var tel3 = document.form1.tel.value;   var fax3 = document.form1.fax.value;   var isValid = true;   if (!tel3) {     alert("電話未入力");     isValid = false;   }   if (!fax3) {     alert("FAX未入力");     isValid = false;   }   if (!isValid) {     return;   }   document.form1.submit(); } </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信B" onclick="check3();"> </form>

  • javascript form送信後の動作

    以下のスクリプトでiframeにデータは送信できているんですが、<input type="text">に入力したテキストが残ってしまいます。どのように記述したらうまくいくでしょうか? <script type="text/javascript"> function send(){ var frm=document.txt_submit; frm.submit(); frm.reset(); } </script> <form name="txt_submit" action="log.cgi" method="post" target="log" autocomplete="off"> <input type="text" name="ctxt" size="20" value=""> <input type="button" value="送信" onclick="return send();"> </form>

  • javascriptの計算結果をweb上に表示

    WEB上で入力した数値から複数の計算をさせ、それをフォームからcgiに送るjavascriprを組みたいと思っています。 【現在保有のスクリプト】 下記のスクリプト1では、text1 text2 欄に数値を入力した後、「計算」ボタンを押し、送信ボタンを押すと、計算結果をcgiに送ることが可能です。 (下記の場合は、「入力数値の和」と「積」の2つの数値の送信する) 【やりたいこと】 text1 text2 欄に数値を入力した後、「計算」ボタンを押したあとに、「和と積がブラウザ上に表示され、確認した後に「送信ボタン」を押せるようにしたい。 ということで、修正したのがスクリプト2です。 【質問事項】 スクリプト2では、スクリプト1をベースに javascript上に msg.innerHTML = msg; msg2.innerHTML = msg2; を加え、 HTML上に <p id="msg"></p> <p id="msg2"></p> を加えていますが、これでは動きません。 上記に加え function readText() { var text1 = document.getElementById(""); などのパーツを入力する必要があるはずだと思うのですが、いろいろな場所に試行錯誤しておりますが、うまくいきません。 ご教示いただきたくお願いいたします。 【スクリプト1】************************************************ <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>test</title> <script type="text/javascript"> <!-- //@cc_on document./*@if(1) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/ 'click', function( evt ) { var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/ var v1, v2, msg, sum, msg2, sum2; if( t.type == 'button' && t.name == 'calc' && t.form.id == 'form2' ) { v1 = t.form.elements['text1'].value; v2 = t.form.elements['text2'].value; if ( isNaN( v1 ) || v1 == '' || isNaN( v2 ) || v2 == '' ) { msg = '数字以外の文字が入ってます'; } else { sum = parseFloat( v1 ) * parseFloat( v2 ); msg = '積は、' + sum + 'です'; sum2 = parseFloat( v1 ) + parseFloat( v2 ); msg2 = '和は、' + sum2 + 'です'; } t.form.elements['plus'].value = msg; t.form.elements['plus2'].value = msg2; } }, false ); //--> </script> </head> <body> <form action="form30.cgi" method="post" name="form2" id="form2"> <fieldset> <input type="text" id="text1" name="text1" size="10" maxlength="10" />+ <input type="text" id="text2" name="text2" size="10" maxlength="10" /> <input type="button" value="計算" name="calc" /> <br> <input type="hidden" name="plus" value=""> <input type="hidden" name="plus2" value=""> <input type="submit" value="送信" /> </fieldset> </form> </body> </html> **************************************************************** 【スクリプト2】上記を改造しweb上で計算結果を表示させたい******** <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>test</title> <script type="text/javascript"> <!-- //@cc_on document./*@if(1) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/ 'click', function( evt ) { var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/ var v1, v2, msg, sum, msg2, sum2; if( t.type == 'button' && t.name == 'calc' && t.form.id == 'form2' ) { v1 = t.form.elements['text1'].value; v2 = t.form.elements['text2'].value; if ( isNaN( v1 ) || v1 == '' || isNaN( v2 ) || v2 == '' ) { msg = '数字以外の文字が入ってます'; } else { sum = parseFloat( v1 ) * parseFloat( v2 ); msg = '積は、' + sum + 'です'; sum2 = parseFloat( v1 ) + parseFloat( v2 ); msg2 = '和は、' + sum2 + 'です'; } t.form.elements['plus'].value = msg; t.form.elements['plus2'].value = msg2; msg.innerHTML = msg; msg2.innerHTML = msg2; } }, false ); //--> </script> </head> <body> <form action="form30.cgi" method="post" name="form2" id="form2"> <fieldset> <input type="text" id="text1" name="text1" size="10" maxlength="10" />+ <input type="text" id="text2" name="text2" size="10" maxlength="10" /> <input type="button" value="計算" name="calc" /> <br> <input type="hidden" name="plus" value=""> <input type="hidden" name="plus2" value=""> <p id="msg"></p> <p id="msg2"></p> <input type="submit" value="送信" /> </fieldset> </form> </body> </html> ****************************************************************

  • 色をラジオボタンで選択

    エレメントでボタンを押すと色を変えるJavaScriptです。 検索をしながら ボタンで一度変えることはできるようになりましたが <script type="text/javascript"> function effect() { var element = document.getElementById("sample"); element.style.color = '#000000'; } </script> <button onclick="effect()">チェンジ</button> <span id="sample">■□□■</span> ラジオボタンで選択するようにしたいのですが どのようにすればよいでしょうか? うまくいく方法を教えてください。 ブラウザーはGoogle Chrome最新版です。 どうしてもできなければ Firefoxでもかまいません。 <script type="text/javascript"> function effect() { var element = document.getElementById("sample"); element.style.color = '#000000'; } </script> <input type=radio name="colorcode" value="#000000" checked>黒 <input type=radio name="colorcode" value="#ff0000">赤 <input type=radio name="colorcode" value="#00ff00">緑 <span id="sample">■□□■</span>

  • ボタンを押すとテキストボックスが増えるJavaScriptについて教えてください

    Javascriptで質問です。 <input type="text" name="hoge1" value=""> <input type="text" name="hoge2" value=""> <input type="text" name="hoge3" value=""> というようなテキストボックスがあり、「追加」というボタンを押すと 新たなテキストボックス <input type="text" name="hoge4" value=""> が追加されるようなJavascriptを作成したいと考えています。 新たに作られたテキストボックスには name="hoge4" name="hoge5" ・ ・ ・ というように、nameの部分に「hogeの右にある番号に1ずつ加算された名前」を付けていきたいのです。 検索すると、テキストボックスを追加していくだけのサンプルはいくつかあったのですが、nameの部分を加算していく、という例が無くて行き詰っています。 よろしくお願いいたします。

  • javascript初心者です。

    javascript初心者です。 下記のソースコードで、単純に、マウスホーバーで、テキストの内容を切り替えるものですが、 IE8ですと動作しますが、Firefox3.5だと動作しません。 なにか、原因あるのでしょうか。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>無題ドキュメント</title> <script language="javascript" type="text/javascript"> function formcalc(formobj){ var val_a= formobj.elements["para_a"].value; var val_b= formobj.elements["para_b"].value formobj.elements["answer"].value = val_a * val_b } function chktext(){ var obj = document.getElementById("id1"); obj.innerText="テキスト変更しました。"; } </script> </head> <body> <form> <input size="10" type="text" name="para_a" value="0" />× <input size="10" type="text" name="para_b" value="0" />= <input size="10" type="text" name="answer" /><br /> <input type="button" name="keisan" value="計算" onclick="formcalc(this.form)" /> </form> <br /><br /><br /><br /> <p id="id1" onMouseOver="this.innerText='受付終了'">最初のテキスト</p> </body> </html>

  • javaScriptのif文について…

    以下のようなプログラムを作成しました。作ったのはサンプルで、本当に作りたいのはもっと条件が多いのを作りたいのですが、かなりifの羅列となってしまいます。他に何か良い方法はありませんか?教えてくださいm(__)M <html> <script type="text/javascript"> function hoge(){ var v1=document.getElementById('s1').value; var v2=document.getElementById('s2').value; var rslt; if (v1==1 && v2==1) { rslt=36; } else { if (v1==1 && v2==2) { rslt=29; } else { if (v1==1 && v2==3) { rslt=22; } else { if (v1==1 && v2==4) { rslt=14; } else { if (v1==1 && v2==5) { rslt=7; } else { if (v1==1 && v2==6) { rslt=0; } else { rslt='?'; }} document.getElementById('txt').value=rslt; } </script> <body> <select id="s1" onChange="hoge()"> <option value="1">1 <option value="2">2 <option value="3">3 <option value="4">4 </select>   <select id="s2" onChange="hoge()"> <option value="1">1 <option value="2">2 <option value="3">3 <option value="4">4 <option value="5">5 <option value="6">6 </select><p> <input type="text" id="txt" value=""> </body> </html>

専門家に質問してみよう