0

ページに1つの製品がある場合にうまく機能する以下の関数があります。

<script type="text/javascript">// <![CDATA[
function confSubmit()
{
if(!document.getElementById("one").checked)
{ 
    alert("Please read and accept the terms and conditions + Warnings in order to sign    up to Woolly Mammoth");
    return false;
}

}
// ]]></script>

利用規約のチェックボックスがチェックされていない場合、上記の関数はエラーを表示します。

現在、ページに複数の商品があり、すべて独自のチェックボックスが付いています。問題は、すべての商品の横にチェックボックスをオンにすると、すべての商品の横にあるチェックボックスをオンにしない限り、常にエラーが表示されることです。

誰かが関数の編集を手伝ってくれるので、複数のチェックボックスで使用できますが、チェックする必要があるのは1つのボックスだけです。

この関数はペイパルボタンで呼び出されます。確かに、関数の名前を変更してすべての製品のIDを変更するよりも、これを行う簡単な方法がありますか?

ありがとう

4

3 に答える 3

1

What you can do is get elements by classname instead, and give the checkboxes a common CSS class name. Unfortuantely < IE9 does not support getElementsbyClassName, so I suggest using jQuery.

function confSubmit() {
    var checkCount = $('.myclass:checked').length;
    if(checkCount < 1) {
        alert('....');
    }
}
于 2013-02-19T19:10:58.130 に答える
0

コードを実行しなかったので、テストします。チェックボックスごとに異なるIDを設定する必要があります。

<script type="text/javascript">// <![CDATA[
function confSubmit()
{
var boxesChecked = 0;

if(document.getElementById("one").checked)
{ 
boxesChecked++;
}
if(document.getElementById("two").checked)
{ 
boxesChecked++;
}
//same for all boxes ....

if(boxesChecked==1)
    return true;
 else
    return false;

}
// ]]></script>
于 2013-02-19T19:17:27.063 に答える
0

diodeusの答えは正しいですが、JQueryなしでそれを実行したい場合(神があなたを助けてくれます)、getElementsByClassName()のポリフィルが必要です:

https://gist.github.com/eikes/2299607から

// Add a getElementsByClassName function if the browser doesn't have one
// Limitation: only works with one class name
// Copyright: Eike Send http://eike.se/nd
// License: MIT License


if (!document.getElementsByClassName) {
  document.getElementsByClassName = function(search) {
    var d = document, elements, pattern, i, results = [];
    if (d.querySelectorAll) { // IE8
      return d.querySelectorAll("." + search);
    }
    if (d.evaluate) { // IE6, IE7
      pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
      elements = d.evaluate(pattern, d, null, 0, null);
      while ((i = elements.iterateNext())) {
        results.push(i);
      }
    } else {
      elements = d.getElementsByTagName("*");
      pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");
      for (i = 0; i < elements.length; i++) {
        if ( pattern.test(elements[i].className) ) {
          results.push(elements[i]);
        }
      }
    }
    return results;
  }
}

次に、通常どおりgetElementsByClassNameを使用できます。

var elements = document.getElementsByClassName('myClass');
for(var i = 0; i < elements.length; i++) {
     if(elements[i].checked) {
        //do something here.
     }
}

選択する必要のあるすべての要素がmyClass適用された場所:class="myClass"またはclass="something something myClass"

于 2013-02-19T19:22:40.117 に答える