Javascript Internet Explorer Проблема - что я делаю не так? - PullRequest
0 голосов
/ 10 февраля 2012

Я просмотрел много постов безрезультатно.У меня есть следующее в простой форме, где один из продуктов изменяется в зависимости от количества отмеченных флажков.Он работает в любом браузере, кроме IE.Что я делаю неправильно?

<body>
<script type="text/javascript">
function check(){
"use strict";
var count = 0, x=0, checkboxes=document.signup.getElementsByClassName("styled");
for(;x<checkboxes.length; x++){
    if(checkboxes[x].checked){
        count++;
    }
}
if(count<3) {
   document.getElementById("variable").value = "1";
}
else if (count == 3){

    document.getElementById("variable").value = "74";
}
else if (count == 4){

    document.getElementById("variable").value = "75";
}
else if (count == 5){

    document.getElementById("variable").value = "76";
}

}
</script>
<form name="signup" id="signup" method="post" action="/subscribers/signup.php">
<input type="checkbox" id="variable" name="product_id[]" value="" class="styled"></input>product 1 - variable</div>
<input type="checkbox" id="same" name="product_id[]" value="3" class="styled"></input>product 2
<input type="checkbox" id="same2" name="product_id[]" value="2" class="styled"></input>product 3
<input type="checkbox" id="same3" name="product_id[]" value="4" class="styled"></input><div class="check-title">product 4
<input type="checkbox" id="same4" name="product_id[]" value="44" class="styled"></input><div class="check-title">product 5          
<a href="#" id="submit" onClick="check()">Continue</a></td></tr>
</form>
</body>

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

Все версии IE до IE9 не поддерживают getElementsByClassName().Вам нужно будет использовать какую-то замену.

Вместо этого куска вашего кода:

checkboxes = document.signup.getElementsByClassName("styled");

Я бы предложил использовать это:

checkboxes = document.getElementById("signup").getElementsByTagName("input")

getElementsByTagName() широко поддерживается во всех версиях IE.Очевидно, что он получит все теги input, но только для флажков будет установлен checked, поэтому вы должны быть в порядке.

Если вам нужно отфильтровать по классу, то вы можете сделать все это следующим образом:

function check() {
    "use strict";

    // initialize checkbox count to 0
    var count = 0, item;

    // get all input tags in the form
    var inputs = document.getElementById("signup").getElementsByTagName("input");

    // loop through all input tags in the form
    for (var i = 0; i < inputs.length; i++) {
        // get this one into the local variable item
        item = inputs[i];
        // if this input tag has the right classname and is checked, increment the count
        if ((item.className.indexOf("styled") != -1) && item.checked) {
            count++;
        }
    }
    // get object for result
    var obj = document.getElementById("variable");
    // check count and set result based on the count
    if(count < 3) {
        obj.value = "1";
    } else if (count == 3) {
        obj.value = "74";
    } else if (count == 4) {
        obj.value = "75";
    } else if (count == 5) {
        obj.value = "76";
    }
}
0 голосов
/ 10 февраля 2012

IE не имеет метода getElementsByClassName ... вы можете попытаться определить его:

if(document.getElementsByClassName == undefined) { 
   document.getElementsByClassName = function(cl) { 
      var retnode = []; 
      var myclass = new RegExp('\\b'+cl+'\\b'); 
      var elem = this.getElementsByTagName('*'); 
      for (var i = 0; i < elem.length; i++) { 
         var classes = elem[i].className; 
         if (myclass.test(classes)) { 
            retnode.push(elem[i]); 
         } 
      } 
      return retnode; 
   } 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...