1

チェックボックスが選択されたときにチェックボックスを追加し、ページの下部に合計を生成する次のコードがあります。この関数は次のコードを使用します。

<script type="text/javascript">
function checkTotal() {
    document.listForm.total.value = '';
    var sum = 68.50;
    for (i=0;i<document.listForm.choice.length;i++) {
      if (document.listForm.choice[i].checked) {
        sum = sum + parseFloat(document.listForm.choice[i].value);
      }
    }
    document.listForm.total.value = sum.toFixed(2);
}

</script>

これらのチェックボックスはフォーム内にあり、フォームをメール アカウントに送信する必要があります。現時点では、すべてのチェックボックスが同じ入力名「choice」を共有しているため、PHP は最後にチェックされたボックスの値のみを送信します。

チェックボックスの入力名コードを変更して、さまざまなチェックボックスに「choice1」「choice2」「choice3」という名前を付ける必要があります。「choice」という名前のすべてのチェックボックスを一緒に追加するのではなく、関数がすべてのチェックボックス名「choice1」「choice2」「choice3」などを計算するには、JavaScript で何を変更する必要がありますか? 私はJavascriptとPHPの知識がほとんどないので、助けていただければ幸いです。ありがとう。

4

2 に答える 2

2

チェックボックスの名前を一意にするのではなく、名前に「[]」を追加することをお勧めします。これにより、PHP は最後の値を保持するのではなく、値を配列に変換します。

したがって、choice ではなく、choice[] という名前が必要になります。

この回答にはサンプル コードもあります。

于 2013-10-24T10:23:36.597 に答える
0

以下のコードは問題なく動作します (自己完結型の Web ページ)。問題は、チェックボックスの名前が異なる場合に、チェックボックスの配列 (グループ) を取得する方法です。jquery を使用する場合は、すべて同じクラスを指定して、そのクラスでそれらを取得できますが、裸の JavaScript を使用している場合は、タグ名 (チェックボックスの場合は「入力」) で要素を取得できます。 、そしてそれぞれに「choice」で始まる名前属性があることを確認し、ボタン(入力でもある)や異なる名前の他のチェックボックスなど、「choice」で始まらないものを無視します。チェックボックスを何らかの方法でグループ化しない限り、ページが巨大な場合は少し非効率的です。

それらをグループ化するには、次のようなタグにまとめます

`<div id="checkboxes"> (checkboxes go here) </div>`

次に使用する

`var cb = document.getElementById("checkboxes");`
`var arrInputs =cb.getElementsByTagName("input");`
  • 行が arrInputs 配列を取得します。これは、Div 内から入力型要素を取得するだけです。ただし、ページレイアウトでチェックボックスを1つのdivに配置できるとは想定したくありません

これがダグに役立つことを願っています

<script type="text/javascript">
function checkTotal() {
    document.forms.listForm.total.value = '';
    var sum = 68.50;

    var frm=document.forms.listForm; // wasnt sure what your original listForm element was so I've put this form into a variable, frm

    frm.total.value = '';


    var arrInputs =document.getElementsByTagName("input");    // get all Input type elements on the form

    for (i=0; i < arrInputs .length;i++) {
      if (arrInputs[i].name.substr(0,6) == "choice")   { // if the name starts with "choice"
         if (arrInputs[i].checked) {
          sum = sum + parseFloat(arrInputs[i].value);
         }
      }
    }
    frm.total.value = sum.toFixed(2);
}

</script>

</head>


<body>
<form name="listForm">
<a href='javascript:checkTotal()'>check</a><br>
<input type=checkbox name="choice1" value="1"><br>
<input type=checkbox name="choice2" value="2"><br>
<input type=checkbox name="choice3" value="3"><br>
<input type=checkbox name="choice4" value="4"><br>
<input type=checkbox name="choice5" value="5"><br>
<input type=checkbox name="choice6" value="6"><br>
<br>
<input type=text name=total value=""><br>
</form>

</body>
</html>
于 2013-10-24T10:41:13.190 に答える