• ベストアンサー

アラートボックスが表示されません。

はじめまして。 初めて質問させていただきます。 JavaServletでテキストボックスとボタンを置き、submitすると下に何個でも追記できるプログラムを作りました。 そこに送信時、テキストボックスが空の場合「空です」のアラートボックスが表示され、送信が中断される機能を追加しようと思っています。 下記のようにコーディングした場合、テキストボックス内の状態に関わらず、アラートボックスが表示されません。色々試したところ、入力の有無に関わらず、ボタンを押すたびにアラートボックスが表示されたり、今回のように全く表示されなかったりします。 ちなみに下記がコーディング内容です。 大変お手数かけますが、解決方法をご教示いただけると幸いです。 ※WebアプリケーションサーバはTomcatを用いて、アドレスは http://localhost:8080/study/servlet/alerttest としています。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; /** * 送信時にテキストボックスが空の場合"空です"のアラートボックスが * 示され、送信を中断させるようにする。 */ public class alerttest extends HttpServlet { // doGetメソッドをオーバーライド public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ボディ部を出力するためのオブジェクト生成 PrintWriter out = response.getWriter(); // リクエストパラメータの文字エンコーディング名をセット response.setContentType("text/html; charset=Shift_JIS"); out.println("<html>"); out.println("<head>"); out.println("<title>alerttest</title>"); out.println("<script type='text/javascript'>"); out.println("<!--"); out.println("function startAlert()"); out.println("{"); out.println("var naiyou = document.getElementsByName('moziretsu');"); out.println("if(naiyou == '')"); out.println("{"); out.println("alert('空です');"); out.println("}"); out.println("}"); out.println("// --></script>"); out.println("</head>"); out.println("<body>"); out.println("<FORM action='/study/servlet/alerttest' method='GET'>"); out.println("<INPUT type='text' name='moziretsu'>"); out.println("<INPUT type='submit' value='クエリ送信' onclick='startAlert()'><BR>"); // 入力パラメータの取得 String moziretsuPrm = request.getParameter("moziretsu"); Object moziretsuObj = moziretsuPrm; // セッションオブジェクトの取りだし HttpSession session = request.getSession(); // セッションにオブジェクトの追加 if(moziretsuPrm != null) { session.setAttribute(moziretsuPrm,moziretsuObj); } // セッション属性の一覧を出力 Enumeration names = session.getAttributeNames(); while(names.hasMoreElements()) { String key = (String)names.nextElement(); out.println(key + "<br>"); } out.println("</body>"); out.println("</html>"); } }

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

  • ベストアンサー
noname#49428
noname#49428
回答No.3

勘違いしてました。 out.println("var naiyou = document.getElementsByName('moziretsu')[0].value;"); こっちでどうですか。

t_118
質問者

お礼

out.println("var naiyou = document.getElementsByName('moziretsu')[0].value;"); を使ってみたところ無事出来ました。 out.println("var naiyou = document.getElementsByName('moziretsu')[0];"); の場合は、 ("if(naiyou.value == '')"); で出来ました。 JavaScriptはJavaと異なって、変数の型にルーズなためメソッドの解釈までルーズになってしまっていたようです。 大変助かりました。 ありがとうございました。

その他の回答 (3)

noname#49428
noname#49428
回答No.4

若しくは、 out.println("var naiyou = document.forms[0].moziretsu.value;");

t_118
質問者

お礼

こちらも出来ました。 ありがとうございます。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

・ドキュメント内のユニークな要素を取り出すときは、nameよりもid属性を付加し、getElementByIdを使用したほうがいいです。 name指定だと配列で返ってきたりして面倒です。 ・テキストフィールドの中身は element.valueで参照します。なのでフィールド内の要素が空かどうかを調べるif節は if(naiyou.value == "" ) が正しいです。

t_118
質問者

補足

素早いお返事ありがとうございます。 早速、 var naiyou = document.getElementsByName('moziretsu'); を var naiyou = document.getElementById('moziretsu'); に変え、 if(naiyou.value == "" ) にも変えました。 フォーム作成部分も、 <INPUT type='text' name='moziretsu'> から <INPUT type='text' id='moziretsu'> に変えました。 その結果、きちんとアラートボックスが表示されるようになったのですが、今度はフォームの下に入力された内容の一覧が表示されなくなりました。 セッションが保持されていないのでしょうか?

noname#49428
noname#49428
回答No.1

out.println("var naiyou = document.getElementsByName('moziretsu').value;"); これでどうですか。 未検証です。

t_118
質問者

補足

素早いお返事ありがとうございます。 こちらを試してみましたが、やはり中身の有無に関わらず、アラートボックスが表示されませんでした。

関連するQ&A

専門家に質問してみよう