• ベストアンサー

オブジェクト指向で書いた時のフォーム値受取り

オブジェクト指向で記述したときの、フォームの値の受取の記述方法 がわかりません。 例えば下記のようなフォームがあったとすると ---------------------- <form name="test"> <input type="text" name="name"> <input type="button" value="送信" onClick="testAlert()"> </form> ---------------------- 手続き型では ============================= function testAlert(){  var name = document.test.name.value;  alert(name); } ============================= こんな感じで値を受取りアラート出力できますが、 オブジェクト指向で記述した場合はどうなりますか? ============================= var aaa = function(name){  this.name = name; }; aaa.prototype.test = function(){  return alert(name); }; ============================= こういうような感じだとは思うのですが、ここから先が分かりません。 よろしくお願いします。

  • yuuse
  • お礼率80% (4/5)

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

  • ベストアンサー
  • my--
  • ベストアンサー率89% (91/102)
回答No.5

<form name="test"> <div><input type="text" name="name1" value="name1.value"> <input type="text" name="name2" value="name2.value"></div> </form> <script type="text/javascript"> //コンストラクタ関数定義 var aaa = function(name){  this.name = name; }; //prototypeのメンバを定義 aaa.prototype.test = function(){  var val = document.test[this.name].value;  alert(val); //alert  return val; //return value }; //new演算子を使いインスタンス化 var inst = new aaa("name1"); inst.test();//name1.value inst.name = "name2"; inst.test();//name2.value /* 「prototypeプロパティって何ぞや?」 instは作成時メンバにnameを持ちますが、testを持ったわけではありません。 javascriptでは参照がメンバに存在しなかった場合、次にそのオブジェクトを生成した コンストラクタのprototypeから探索することになっています。 実際に処理しているのは生成元aaa.prototypeのtestメソッドです。 コンストラクタ関数から生成された複数のオブジェクトに同じメソッド、プロパティを 共有させることで、コードの簡素化、メモリの節約になると言われてます。 あくまでスキル、設計センス次第だと思いますが。 「prototypeプロパティ プロトタイプチェーン new演算子 thisキーワード」 thisキーワードも重要な役割をしているので、この辺りを抑えておくとよいかと。 解説サイトは充実しています。 */ </script>

yuuse
質問者

お礼

今回私の書き方が悪く情報も少なくてすみませんでした。 皆様に知りたいことを上手く伝えられなかったようでしたので、 アドバイスを参考にして自分で進めようと思います。 本当にありがとうございました!

その他の回答 (4)

回答No.4

prototypeというよりも、「オブジェクト指向プログラムの作り方、オブジェクトの使い方」の問題だと思います。 prototypeを使わなくてもオブジェクト指向プログラミングは出来ますので。。。 私もオブジェクトの使い方がわかるまでは、まだ手続き型で書いておく方がいいかと思いますが、、、 -------- var aaa = function(name){  this.name = name; }; aaa.prototype.test = function(){  return alert(this.name); }; var myAaa=new aaa(document.test.elements['name'].value); myAaa.test(); ---------- this.nameに何を入れるつもりだったのかわかりませんので。 No.2の使い方を意図されてるのかもしれませんが、オリジナルを尊重。

yuuse
質問者

お礼

お礼が遅れて申し訳ありません。 ありがとうございました!

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

なにをもってオブジェクト指向と考えているかによりますが 理解が浅いならprototypeをいじるのは尚早かと とりあえずこんな感じで? <script> try{ document.addEventListener ('click',function(e){clickfunc(e)},true); }catch(e){ document.attachEvent('onclick',function(e){clickfunc(e)}); } function clickfunc(e){ var t = (e.srcElement || e.target); if(t.nodeName=="INPUT" && t.type=="button" && t.value=="送信"){ alert(t.form.elements["name"].value); } //e.preventDefault(); } </script> <form> <p> <input type="text" name="name" value="hoge" /> <input type="button" value="送信" /> </p> </form>

yuuse
質問者

お礼

お礼が遅れて申し訳ありません。 今回は諸事情でprototypeが必要でしたので、 アドバイスのソースは利用できませんが、 とても勉強になりました。 ありがとうございました!

回答No.2

aaa.prototype.test = function( ) { return document.forms[ 'test' ].elements[ this.name ].value; }; <form name="test"> は <form id="test"> が、よかったり。

yuuse
質問者

お礼

お礼が遅れて申し訳ありません。 ありがとうございました!

回答No.1

return alert(name); を return alert( this.name );

yuuse
質問者

補足

本当にすみません! ここは単に質問投稿時に「this.」を記述し忘れていただけです。 引き続きよろしくお願いいたします。

関連するQ&A

  • Arrayオブジェクトとforms配列

    以下のスクリプトを実行すると、(2)の所で「document.forms.GetFromArray is not found」 のエラーとなります。(ブラウザはFirefox)。 意図としてはArrayオブジェクトをカスタマイズして追加したGetFromArray()メソッドでforms配列を操作したいのですが... エラーメッセージからすると、「document.formsは配列(Arrayオブジェクト)では無い」と言っているようです。 この方法でforms配列を参照する方法を教えて下さい。 あるいは、Arrayオブジェクトではない、他のオブジェクトをカスタマイズするのでしょうか?お願いします。 <html> <head> <script type="text/javascript"> <!-- Array.prototype.GetFromArray=function(func){ for(var i=0;i<this.length;i++){ func(this[i]); } } function disp1(h){ alert(h); } function disp2(h){ alert(h.name); } function run(){ var array=new Array('dog','cat','fish'); array.GetFromArray(disp1); //(1) OK document.forms.GetFromArray(disp2); //(2) エラー } //--> </script> </head> <body> <form name="test"> <input type="text" name="bunrui" value="分類">/ <input type="text" name="detail" value="詳細">/ <input type="button" value="実行" onClick="run();"> </form> </body> </html>

  • Ajaxのプログラムをオブジェクト指向で・・・

    Ajaxのプログラムを一つのオブジェクトにまとめてみようと思ってやってみたのですが、 >エラー: プロパティ 'readyState' の値を取得できません: オブジェクトは Null または未定義です。 などと表示されて上手く行きません。 何が悪くてエラーが出るのかが理解出来ていません。 詳しい方、エラーの原因・解決方法を教えてください。お願いします。 php側 echo "test"; javascript側 //-------------------------------------------------------------------- // てすとオブジェクト //-------------------------------------------------------------------- var Test = function() {// メンバ変数の定義 this.request = ""; this.query = "test";// クエリ this.response = "";// レスポンス }; Test.prototype = {// プロトタイプの定義 /* データ送信 */ tSend : function() { if(this.query) { this.request = this.ajaxRequest(); this.request.onreadystatechange = this.tLoad; if(this.query) { this.request.open("POST", "./index.php", true); this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); this.request.send(this.query); } } }, /* データ受信 */ tLoad : function() { if((this.request.readyState == 4) && (this.request.status == 200)) { alert("test"); } }, /* HTTP通信用 */ ajaxRequest : function() { var value = null; try { value = new XMLHttpRequest(); } catch(e) { try { value = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { value = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { return null; } } } return value; } }; //----------------------------------------------------------------------- // 実行 //----------------------------------------------------------------------- var Test = new Test();// 通信用オブジェクトの生成 Test.tSend();// データ送信

  • フォーム内のオブジェクトを取得したい

    フォームタグ内のオブジェクトをphpで取得できないでしょうか。 たとえば <From Action"xxx.php" Post="Mothod"> <Input Type=Text Name=xxx> <Input Type=Text Name=xxx> <Input Type=Submit Name=xxx Value=送信> </Form> このようなフォームがあり「送信」を押下した際に、このフォームオブジェクトの要素を知りたいのです。 JavaScriptであれば document.forms[0].elements[0] で拾えたと思うのです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • VBSのIEオブジェクトでフォームデータ送信する

    ■質問 通常IEオブジェクトを使ってフォームにセットされたデータを サブミットするには、 IE.Document.forms("").elements("").value = "" IE.Document.forms("").submit() と行うと思うのですが。 例えば下記のようなフォームを送信する際、 フォームのある"http://test.com/login_form" ページにわざわざ移動せず 直接"http://test.com/action"の "hidden"のエリアに対してデータを送信 する方法を教えて頂けませんでしょうか? また、Form1に複数のエレメントが存在する場合 全てのエレメントの値を送らないと正しく処理 できないでしょうか? ■"http://test.com/login_form" のHTML <form name="Form1" method="post" action="/action"> <input type="hidden" name="ID" value="1234"> <input type="submit"> </form>

  • フォームのPOSTデータをサブウィンドウに渡したいです。

    フォームのPOSTデータをサブウィンドウに渡したいです。 <form action="sample.html" method="post"> <input type="checkbox" name="test[]" value="0">0 <input type="checkbox" name="test[]" value="1">1 <input type="checkbox" name="test[]" value="2">2 <input type="checkbox" name="test[]" value="3">3 <input type="checkbox" name="test[]" value="4">4 </form> 上記のフォームの値を、サブミットボタンを押したときにサブウィンドウをひらき、そのサブウィンドウに渡したいのですが、いまいち上手くいきません。 window.openでサブウィンドウを開いてもデータが受け渡せずにいます。 このような場合、どうしたら値を渡せるのでしょうか。 理想はPOSTで渡したいのですが、引数で渡す方法でもかまいません。

  • fileUploadオブジェクトへの値の代入 (困っています。教えてください。m(__)m)

    こんばんは。 fileUploadオブジェクトへの値の代入がどうにもこうにもできません。 いったいどうしたらいいのでしょうか?どうか助けてください。 よろしくお願いいたします。m(__)m -- <HTML><BODY> <FORM NAME="myFormF"> <INPUT TYPE="file" NAME="myFile"> <INPUT TYPE="button" value="set FILEFILE -> file" onClick="document.myFormF.myFile.value='FILEFILE'"> <INPUT TYPE="submit" onClick="alert(document.myFormF.myFile.value)"> </FORM> <FORM NAME="myFormT"> <INPUT TYPE="text" NAME="myText"> <INPUT TYPE="button" value="set TEXTTEXT -> text" onClick="document.myFormT.myText.value='TEXTTEXT'"> <INPUT TYPE="submit" onClick="alert(document.myFormT.myText.value)"> </FORM> </BODY></HTML> -- key: fileUpload object,ファイルアップロードオブジェクト,WSH,javascript

  • windowオブジェクトの操作

    登録フォームを作成しています。 登録内容に誤りがなければ次のページへ飛び、登録内容に誤りがある場合は再度同じページで登録させる(次のページにはいかないようにさせたい。)というふうにしたいのですがどうすればよいでしょうか? function mailcheck(){ var tmail = document.form.temail.value; var mail = document.form.email.value; if(tmail != mail){ window.alert("E-Mailが一致しません!"); ★ } else if((tmail == "") | (mail == "")){ window.alert("E-Mail記入されていません! "); ★ } } <input type="submit" value="確認" name="submit" onclick="mailcheck()"> この場合は★マークの所でwindowオブジェクトだけで操作できるのでしょうか?

  • フォーム内の値の指定方法

    JavaScriptで、 フォーム内の値を指定するとき、どちらの記述がwebの標準として正しいのでしょうか? document.form1.aaa.value form1.aaa.value  【フォーム】 <from name="form1"> <input type="textbox" name="aaa"> </form>

  • documentオブジェクトのlengthが取れない

    以下のプログラムでobjのlengthが「undefined」となる原因がわからない <script language="JavaScript"><!-- function Check() {alert("スタート"); var obj = document.frm.elements['check']; var i,j =0;alert("length="+ obj.length); for (i = 0; i < obj.length ; i++ ) { if ( obj[i].checked == true ) {j++;} } alert( 'チェックボックスの数='+ i); alert( 'チェックした数='+ j); } //--></script> <form name="frm" method="POST"><input type="checkbox" name="check" value="1"></form> <a href="javascript:Check();">チェック</a> formの中を以下のように変更すると正しく表示される <form name="frm" method="POST"><input type="checkbox" name="check" value="1"><input type="checkbox" name="check" value="2"></form> どなたか、ご教授くださいませ。

  • フォームから受け取る値について

    フォームから送られてくる値に たまに予期しない内容が入ってくるのですが どういった原因が考えられますでしょうか? 具体的なフォームの内容は下記の通りで a,b,c以外の値が送られてくることがあります。 <FORM action="test.php" method=post> <INPUT type=checkbox name=chk[1] value=a> <INPUT type=checkbox name=chk[2] value=b> <INPUT type=checkbox name=chk[3] value=c> <INPUT type=submit value=OK> </FORM> ローカルにフォーム画面のHTMLをダウンロードし form actionとvalueを変更して実行すれば 送れると思いますが・・他に何かありますでしょうか? よろしくお願い致します。 環境:RedHat7.3+Apache1.3+PHP4.2.2

    • 締切済み
    • PHP

専門家に質問してみよう