- 締切済み
単一のフォームオブジェクトを外部ファイル(.js)に送る意味?
とある2つの別ファイル(A.jspとB.jsp)でそれぞれ単一のフォームを使用しています。 そこで各フォームの処理で共通部分を別の外部ファイル(.js)にまとめる場合、例えば。。。フォームの名前を取得してその名前をalertで表示する。。。みたいな処理を外部ファイルに作成します。 A.jsp:<form method='post' name='frmA' onsubmit='return getFrmName(this)'> B.jsp:<form method='post' name='frmB' onsubmit='return getFrmName(this)'> 外部ファイル:共通関数 getFrmName(frm){ alert(frm.name); } ボタンが押されたらalertで表示する。通常なら、”frmA”とか”frmB”って出ます。 ここで、以下のように変更する。 A.jsp:<form method='post' name='frmA' onsubmit='return getFrmName()'> B.jsp:<form method='post' name='frmB' onsubmit='return getFrmName()'> 外部ファイル:共通関数 getFrmName(){ alert(document.forms[0].name); } と、引数のフォームオブジェクトを消して”document.forms[0]”に書き換えた場合でも正常に稼動されます。 その場合、引数なしでも十分なのでは? というか、引数なしの方がより見やすいプログラムになるのでは? また、そのファイルにあるフォーム数を数えるような処理を最初に追加すれば、”document.forms[Index]”:Index(カウントしたフォーム数)にして多重フォームにも対応できるように汎用できそう・・・? 長くなりましたが、上記のタイトルにある通り、フォームオブジェクトを引数とする意味は?できればメリット、デメリット両方があればうれしいです。よろしくお願いします。 <だいたい適当に書いたので多少の省略等はしてますが、ご了承ください>
- みんなの回答 (1)
- 専門家の回答
みんなの回答
素人考えですが、引数でオブジェクトを引き渡した方が、スクリプトの汎用性や総合的なメンテナンス性があがるのではないでしょうか。 もしCGIが吐き出すHTMLなど状況によって内容の変化があるHTMLソースがその外部jsファイルを呼び出す場合に、引数を渡す形を取らず、「document.forms[0].name」の形式でスクリプトを記述すると、仮に本来ターゲットになっているフォーム要素の前に別のフォーム要素が紛れ込んでしまったら、狙い通りの動作にならない可能性があります。 こういった可能性が残るとしたら、こういうdocument.forms[0]でのフォームの特定は汎用性がなく使えないと思います。(そのようなエラーが絶対におきないという保証があるのであれば、問題は起きないかもしれませんが) また、ソース自体が、引数としてオブジェクトを渡すことで全体的に把握しやすくなるのではないでしょうか。 引数なしの方がより見やすいプログラムになるというのは、私の感覚からは逆に思えます。 関数に何を渡しているかがHTMLソース側で明示されるので、このHTMLソースを見たときに何をどうしているかが少し見通しやすくなる、あるいは少なくとも処理の内容を把握する手がかりの一つにはなると思いますよ。 引数もなく、ただ関数だけを呼び出しているとしたら、その関数の動きはHTMLソース側からはブラックボックスになり、外部jsファイルとHTMLソースを両方参照しながら内容を把握する必要に迫られるかもしれません。 関数の処理に何かを渡しているとしたら、スクリプトの動作に関係するであろう内容を一つ特定できますよね。 こういった面で、全体的にソースを把握しやすくなると思います。 素人考えですが、参考になれば…
お礼
返事が遅くなりました。 >そのようなエラーが絶対におきないという保証があるのであれば、問題は起きないかもしれませんが フォーム要素をきっちり把握・管理できていれば問題ないレベルのような気もしますが。。。 >引数としてオブジェクトを渡すことで全体的に把握しやすくなるのではないでしょうか。 >少なくとも処理の内容を把握する手がかりの一つにはなると思いますよ。 >引数もなく、ただ関数だけを呼び出しているとしたら、その関数の動きはHTMLソース側からはブラックボックスになり、 >外部jsファイルとHTMLソースを両方参照しながら内容を把握する必要に迫られるかもしれません。 それは一理あるんですよね。ただ、そこにコメントをきっちり書いておけば回避できる問題でもある訳ですし。。。 >関数の処理に何かを渡しているとしたら、スクリプトの動作に関係するであろう内容を一つ特定できますよね。 確かに。まあ、引数が多い少ないは余りプログラム的には関係ないですが。。。あるとないとでは多少は違いますしね。でも上でも書きましたがコメントでフォローできるレベルですよね。 回答ありがとうございました。