Javascript与Mozilla不兼容

时间:2009-09-30 09:13:29

标签: javascript

以下javascript在IE中工作正常但在Mozilla中没有。 我们有一个标题复选框,onClick,页面中的所有其他复选框都被选中/取消选中。有人可以帮忙吗?

 <script language="javascript">
  function SelectAll() {
      var frm = document.forms[0];
      var j = frm.elements.length;
      var checkAll = document.getElementById("checkAll");
      var checkBoxCount = 0;

      if(checkAll.checked == true) {
          var i = 0;
          while(i != j) {
              if (frm.elements[i].type == "checkbox") {
                  frm.elements[i].checked = true;
                  checkBoxCount++;
              }
              i++;
          }

          var chkAll = document.getElementById("checkAll");
          chkAll.checked = true;
      } else {
          var i = 0;
          while(i != j) {
              if (frm.elements[i].type == "checkbox") {
                  frm.elements[i].checked = false;
              }
              i++;
          }
          var unchkAll = document.getElementById("checkAll");
          unchkAll.checked = false;
      }
  }

4 个答案:

答案 0 :(得分:3)

好的,这是一个更好的方法。在您的HTML中,将您的复选框设置为:

<input type="checkbox" onclick="selectAll(this)" />

然后你的Javascript:

function selectAll(checkbox) {
    var form = checkbox.form;
    for (var i = 0, l = form.elements.length; i < l; ++i) {
        if (form.elements[i].type == 'checkbox') {
            form.elements[i].checked = checkbox.checked;
        }
    }
}

这里是您测试的:http://jsbin.com/idadi

如果这是进入XSLT(无论出于何种原因),那么确保<没有填充它的最简单方法就是使它成为CDATA,就像这样

<someElement><![CDATA[
    function selectAll() { 
        // as above
    }
]]></someElement>

答案 1 :(得分:0)

您可以使用与此类似的功能替换您的功能。这是一个适用于Firefox的 Working Demo 。将 / edit 添加到网址以查看代码

  function SelectAll() {
      var frm = document.forms[0];
      var j = frm.getElementsByTagName('input');
      var checkAll = document.getElementById("checkAll");

      for (var i=0; i < j.length; i++) {
        if (j[i].type == "checkbox") {
          j[i].checked = checkAll.checked; 
        }
      }             
  }

修改

如果您需要避免在代码中使用<符号,可以像这样重写(我也整理了其他一些代码)。

  function SelectAll() {
      var elements = document.forms[0].elements;
      var i = elements.length;
      var checkAll = document.getElementById("checkAll");

      while (i--) {
        if (elements[i].type === "checkbox")
          elements[i].checked = checkAll.checked;
      }

  }

答案 2 :(得分:0)

我将您的代码简化为:

function SelectAll() {
   var elements = document.forms[0].elements;
   var check = document.getElementById("checkAll").checked;
   for (var i = 0; i < elements.length; i++) {
      if (elements[i].type == "checkbox") {
         elements[i].checked = check;
      }
   }
}

我在Firefox中试过它,但它确实有效。

答案 3 :(得分:-1)

如果您没有充分理由不这样做,我建议您使用JavaScript库,例如jQueryMooTools等。它们构建时考虑到了多浏览器兼容性并做了一些事情就像你要做的那样真的很琐碎。