2017-06-28 25 views
0

私はHTMLで書かれたフォームを持っています。このフォームには2つのボタンと表があります。表の各行には、チェックボックスと2つのテキストフィールドがあります。他の機能が動作している間はJavaScriptの機能が動作しません

このボタンは、表から行を追加および削除するためのボタンです。削除ボタンは、チェックボックスがチェックされている行にのみ適用されます。彼らはonClickメソッドを持っています。これは、addRow(tableID)deleteRow(tableID)<script>タグでJavaScriptで書かれた2つのメソッドを参照しています。

addRow(tableID)はボタンをクリックすると機能しますが、削除ボタンをクリックすると何も起こりません。これはdeleteRow(tableID)メソッドを指します。

<form action="Page2.php" method="post" enctype="multipart/form-data"> 
 
    <!-- Contacts Details --> 
 
    <p> 
 
    <input type="button" value="Add Contact" onClick="addRow('contacts')" /> 
 
    <input type="button" value="Remove Contact" onClick="deleteRow('contacts')" /> 
 
    <p>(All actions apply only to entries with check marked check boxes only.)</p> 
 
    </p> 
 
    <table id="contacts" class="form" border="1"> 
 
    <tbody> 
 
     <tr> 
 
     <p> 
 
      <td> 
 
      <input type="checkbox" name="chk[]" checked="checked" /> 
 
      </td> 
 
      <td> 
 
      <label>Address</label> 
 
      <input type="text" name="ADDRESS[]" /> 
 
      </td> 
 
      <td> 
 
      <label for="PHONE_NUMBER">Phone Number</label> 
 
      <input type="text" class="small" name="PHONE_NUMBER[]" /> 
 
      </td> 
 
     </p> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
    <script> 
 
    function addRow(tableID) { 
 
     var table = document.getElementById(tableID); 
 
     var rowCount = table.rows.length; 
 
     if (rowCount < 10) { 
 
     var row = table.insertRow(rowCount); 
 
     var colCount = table.rows[0].cells.length; 
 
     for (var i = 0; i < colCount; i++) { 
 
      var newcell = row.insertCell(i); 
 
      newcell.innerHTML = table.rows[0].cells[i].innerHTML; 
 
     } 
 
     } else { 
 
     alert("Maximum Contacts Number is 10"); 
 
     } 
 
    } 
 

 
    function deleteRow(tableID) { 
 
     var table = document.getElementById(tableID); 
 
     var rowCount = table.rows.length; 
 
     for (var i = 0; i < rowCount; i++) { 
 
      debugger; 
 
     var row = table.rows[i]; 
 
     var chkbox = row.cells[0].childNodes[0]; 
 
     if (null != chkbox && true == chkbox.checked) { 
 
      if (rowCount <= 1) { 
 
      alert("Cannot Remove all Contacts"); 
 
      break; 
 
      } 
 

 
      table.deleteRow(i); 
 
      rowCount--; 
 
      i--; 
 
     } 
 
     } 
 
    } 
 
    </script> 
 

 
    <!-- Form Sending --> 
 
    <input type="submit" value="Proceed"> 
 
</form>

EDIT番号:

これは、フォームのコードです!
私はちょうど上記のコードをデバッグしました。とrowdeleteRow(tableID)メソッドからのデバッグ結果は、undefinedと表示されています。

これを解決するにはどうすればよいですか?

+0

を探しているquery for the elementすることです。 1に設定された枠線は、別の質問でなければなりません。そうすることで、他の人を検索して助けることができます。また、実際の例が必要です。最後に、Liamが述べたように、どのようなデバッグをしましたか? –

+1

私はあなたのコードを編集してデバッガー文を入れました。開発ツールを開いた状態で実行すると、問題が発生します。あなたの 'chkbox'変数を調べてください。以前にデバッグしたことがない場合は、Liamのリンクhttps://stackoverflow.com/questions/988363/how-can-i-debug-my-javascript-code –

+0

を参照してください。私のコメントは実際に問題が何であるかを正確に伝えています。そうした場合は、質問を編集し、デバッグした方法と現在直面している問題を表示する必要があります。スタックオーバーフローは他の人があなたのためにあなたのコードをデバッグするのではなく、あなたが少なくともあるレベルのデバッグを行ったことを示す必要があります。本当に、私はあなたの質問に答えましたが、私はあなた自身でそれを理解する方法を学ぶためにあなたを軽く指摘しています。あなたが行ったデバッグを追加したら、私は再び投票することを嬉しく思っていますが、あなたが自分のヒントに従えば、あなた自身でそれを理解することができます。 –

答えて

-1

問題は、row.cells[0].childNodes[0]を使用するとノードを見つけることが非常に脆弱なことです。チェックボックスの代わりにテキストノードを取得しています。 childNodesを使用すると、HTMLへの最小限の変更でも破損します。

、より信頼性の高い方法は、一度に2つの質問をしないでくださいあなたは

var chkbox = row.cells[0].querySelector('[type=checkbox]') 

<form action="Page2.php" method="post" enctype="multipart/form-data"> 
 
    <!-- Contacts Details --> 
 
    <p> 
 
    <input type="button" value="Add Contact" onClick="addRow('contacts')" /> 
 
    <input type="button" value="Remove Contact" onClick="deleteRow('contacts')" /> 
 
    <p>(All actions apply only to entries with check marked check boxes only.)</p> 
 
    </p> 
 
    <table id="contacts" class="form" border="1"> 
 
    <tbody> 
 
     <tr> 
 
     <p> 
 
      <td> 
 
      <input type="checkbox" name="chk[]" checked="checked" /> 
 
      </td> 
 
      <td> 
 
      <label>Address</label> 
 
      <input type="text" name="ADDRESS[]" /> 
 
      </td> 
 
      <td> 
 
      <label for="PHONE_NUMBER">Phone Number</label> 
 
      <input type="text" class="small" name="PHONE_NUMBER[]" /> 
 
      </td> 
 
     </p> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
    <script> 
 
    function addRow(tableID) { 
 
     var table = document.getElementById(tableID); 
 
     var rowCount = table.rows.length; 
 
     if (rowCount < 10) { 
 
     var row = table.insertRow(rowCount); 
 
     var colCount = table.rows[0].cells.length; 
 
     for (var i = 0; i < colCount; i++) { 
 
      var newcell = row.insertCell(i); 
 
      newcell.innerHTML = table.rows[0].cells[i].innerHTML; 
 
     } 
 
     } else { 
 
     alert("Maximum Contacts Number is 10"); 
 
     } 
 
    } 
 

 
    function deleteRow(tableID) { 
 
     var table = document.getElementById(tableID); 
 
     var rowCount = table.rows.length; 
 
     for (var i = 0; i < rowCount; i++) { 
 
      debugger; 
 
     var row = table.rows[i]; 
 
     var chkbox = row.cells[0].querySelector('[type=checkbox]'); 
 
     if (null != chkbox && true == chkbox.checked) { 
 
      if (rowCount <= 1) { 
 
      alert("Cannot Remove all Contacts"); 
 
      break; 
 
      } 
 

 
      table.deleteRow(i); 
 
      rowCount--; 
 
      i--; 
 
     } 
 
     } 
 
    } 
 
    </script> 
 

 
    <!-- Form Sending --> 
 
    <input type="submit" value="Proceed"> 
 
</form>

+0

私はこの方法をチェックしましたが、残念ながらこれはまだ動作していません。私は質問に書いたように、 'row'変数も定義されていないので動作していないと思います。 –

+0

@IdoNavehどういう意味ですか?AddとRemove Contactボタンの両方を押して、行を追加したり削除したりしました。 –

+0

@downvoterこれは、それほど私を邪魔してはいけません。しかし、OPが何のコメントもせずに求めていることを正確に行うコードで答えを下落させる人はいますか? –

関連する問題