2012-01-27 19 views
0

私は、セッションによって相互にリンクされた複数ページのフォームセットをまとめ、各セクションが送信されるたびにフォームの検証にJavascriptを使用しています。私の最初のフォームはすばらしく働いています。私の第二のものではない。これは、データベースから取り込まれるドロップダウンボックス数(1〜20)の前の形式に依存する動的に作成されたフォームです。私は、私のドロップダウンを埋める配列を作成するためのすべてのクエリコードをあなたに惜しまなくして、フォーム検証スクリプトとフォーム自体に直接入ります。単純なJavascriptフォームの検証に関する問題

<script>タグなしのヘッドからの検証スクリプト:

function validateForm() 
{ 
    var count = <?php echo $_SESSION['credits']; ?>; 
    var i = 1; 

    for (i = 1; i <= count; i++) 
    { 
     var j = i; 
     for (j++; j <= count; j++) 
     { 
      var a = document.forms["addcredits"]["creditdropdown_"+i].value; 
      var b = document.forms["addcredits"]["creditdropdown_"+j].value; 
      if ((a == b) && (a != 0)) 
      { 
       alert('Cannot select the same writer more than once.'); 
       return false; 
      }   
     } 
    } 

    var foundOne = false; 
    var h = 1; 

    while (h <= count && !foundOne) 
    { 
     if (document.forms["addcredits"]["creditdropdown_"+h].value != 0) 
     { 
      foundOne = true; 
     } 
     h++; 
    } 
    if (!foundOne) 
    { 
     alert('You must select at least one writer to credit.'); 
     return false; 
    } 
} 

フォームコード:

<form id="addcredits" class="appintro" method="post" action="recordcheck.php" onsubmit="return validateForm()"> 
<div class="form_description"> 
    <h2>Song Title Submission</h2> 
    <p>Step 2: Select writing credits for song title</p> 
</div> 
<ul> 
    <?php 
     for ($i = 1; $i <= $_SESSION['credits']; $i++) 
     { ?> 
    <li id="li_<?php echo $i; ?>"> 
     <label class="description" for="creditdropdown_<?php echo $i; ?>">Song Credit #<?php echo $i; ?>:</label> 
     <select "creditdropdown_<?php echo $i; ?>"> 
      <option value="0">Select a writer</option> 
      <?php foreach ($writers as $key => $writer) { ?> 
       <option value="<?php echo $key; ?>"><?php echo $writer; ?></option> 
      <?php } ?> 
     </select> 
     <p class="guidelines" id="guidelines_<?php echo $i; ?>">Writer not found in database? Add them <a href="" target="_blank">here</a>.</p> 
    </li> 
    <?php } ?> 
    <li id="buttons"> 
     <input type="hidden" name="form_id" value="2"> 
     <input type="hidden" name="submit" value="1"> 
     <input id="nextButton" class="button_text" type="submit" name="submit" value="Next"> 
    </li> 
</ul> 
</form> 

私は、[次へ]をクリックしたときに警告ウィンドウのどちらがアップポップと私はランダムこだわる場合デバッグ・アラート・ウィンドウを検証スクリプトに挿入すると、私が表示できるようになったのは、コードの最初に詰まったものだけでした。私が一番働いたのは、最初の割り当てがaだったのですが、デバッガでさえも表示されませんでした。私は、私が割り当てに間違って何かをしていると仮定しているか、ドロップダウンの値に何か問題がありますか?いずれにせよ、私は困惑しています。

答えて

0

私はこの問題は、あなたのHTMLであると言うだろう:

<select "creditdropdown_<?php echo $i; ?>"> 

あなたは、おそらく、name属性を指定しているが、あなたはname=一部を忘れてしまいました。これを試してみてください:

<select name="creditdropdown_<?php echo $i; ?>"> 

をお使いの検証機能では、あなたがこの行を取得する場合:

var a = document.forms["addcredits"]["creditdropdown_"+i].value; 

あなたはdocument.forms["addcredits"]["creditdropdown_"+i]があるので、あなたがundefinedが見つからないため、HTMLのname=undefinedのエラーを持っています.valueプロパティを持つことはできません。

(ちなみに、alert()とデバッグが時折非常に便利ですが、Chromeでの開発ツールに組み込まれて使用してオフにはるかに優れている - JSを取得するにはちょうどヒット(と思う)Ctrl + Shift + JをFirefoxのFireBugをダウンロードするか、IEの開発者用ツールバーを使用してくださいalert()の代わりにconsole.log()を使用し、問題が見つかるまでコードをステップ実行してください)

関連する問題