• ベストアンサー

フォーム名に指定文字列が含まれている場合の処理

<script language="JavaScript"><!-- if (txt.word.value.length < 1) { alert(""); } // --></script> <input type=text name=wordabc size=50 value=""> <input type=text name=wordxxx size=50 value=""> <input type=text name=wordzzz size=50 value=""> nameにwordが含まれていた場合にjavascriptで処理させたいのですが、txt.word.value.length の部分をどのように変更すればいいのでしょうか?javascriptは素人並みの知識です。よろしくお願いいたします。

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

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

いまいちわからないところもありますがこんな風な感じですか? <script language="JavaScript"> function func(f){ for(var i=0;i<f.length;i++){ if(f[i].type=="text" && f[i].name.match(/word|comment|title/) && f[i].value.length ==0) { alert("「"+f[i].name+"」フィールドに入力してください"); f[i].focus(); return false } } } </script> <form> <input type=text name="word123" size=50 value=""> <input type=text name="comment456" size=50 value=""> <input type=text name="title789" size=50 value=""> <input type=submit value='送信' onclick='return func(this.form)'> </form>

fx2
質問者

お礼

有難うございます。f[i].focus(); return false が必要だったんですね。これに少し変更を加えまして、おかげ様でやりたいことが出来ました。

その他の回答 (3)

  • VCAT
  • ベストアンサー率20% (16/79)
回答No.3

name属性つかってるなら、コレだけじゃムリでしょ。 それに、全部にwordは含まれているから意味ないような。 この中で、xxxを含むものを抜き出すというのなら書きようも あると思うけど。

fx2
質問者

お礼

有難うございます。逆に排除したい文字列が数字だった場合には、数字のみを無効化することは可能でしょうか?数字は1~999までのランダムな数値です。 以下スクリプトはランダムな数値が入らなければ正常に動作しています。 <script language="JavaScript"> function func(f){ if (f.word.value.length < 1) { alert("message1"); } else { if (f.comment.value.length < 1) { alert("message2"); } else { if (f.title.value.length < 1) { alert("message3"); } else { f.submit(); } } } } </script> <form> <input type=text name="word(1~999までのランダム数値)" size=50 value=""> <input type=text name="comment(1~9999までのランダム数値)" size=50 value=""> <input type=text name="title(1~9999までのランダム数値)" size=50 value=""> <input type=submit value='送信' onclick='func(this.form); return false'> </form>

fx2
質問者

補足

追記。 1~999までの数値を無効化(無視)して動作させるか、または、No1さん、No2さんに教えていただいたように文字列をマッチさせて動作させる、どちらの方法でも、動作すればいいです。 説明下手で申し訳ないですが、どうぞよろしくお願いいたします。

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.2

フォーム中の全inputオブジェクトから名前にwordが 含まれるオブジェクトを抜粋するのはどうでしょう。 obj = document.getElementsByTagName('input'); for(var i=0; i < obj.length; i++){ pos = obj[i].name.indexOf("word",0); if (pos > -1) { //ここ以降にしたい処理を記述 } }

fx2
質問者

補足

有難うございます。おかげさまでやりたい事ができました。あと実際に利用するフォームでは、name="word文字列"は一つのみですので、繰り返す必要がありません。以下のようにして使う予定なのですが、この場合はどのようにすればいいのでしょうか。説明不足で申し訳ございません。お手数ですが、よろしくお願いいたします。 <input type=text name="word排除文字列" size=50 value=""> <input type=text name="comment排除文字列" size=50 value=""> <input type=text name="title排除文字列" size=50 value="">

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

こんなもんでどうでしょう? <script language="JavaScript"> function func(f){ for(var i=0;i<f.length;i++){ if(f[i].name.match("word") && f[i].value.length < 1) { alert(""); } } } </script> <form> <input type="text" name="wordabc" size="50" value=""> <input type="text" name="wordxxx" size="50" value=""> <input type="text" name="wordzzz" size="50" value=""> <input type="button" value="実行" onClick="func(this.form)"> </form>

fx2
質問者

お礼

送信ボタンが押せないのですが、f.submit();を追加すればいいのでしょうか? 通常は、 if (txt.comment.value.length < 1) { alert("error"); } else { txt.submit(); } 教えていただいた内容を元に、↑のようなイメージで試行錯誤してみましたが、 自力では出来ませんでした。お手数ですが、ご指導のほどよろしくお願いいたします。 <input type=text name="word排除文字列" size=50 value=""> <input type=text name="comment排除文字列" size=50 value=""> <input type=text name="title排除文字列" size=50 value=""> ↑の三つの文字列をname.match("")で抜き出して処理をさせ、errorがなければ送信を続行させたいです。

fx2
質問者

補足

有難うございます。おかげさまでやりたい事ができました。あと実際に利用するフォームでは、name="word文字列"は一つのみですので、繰り返す必要がありません。この場合はどのようにすればいいのでしょうか。説明不足で申し訳ございません。お手数ですが、よろしくお願いいたします。

関連するQ&A