使用动态表单操作时出现IE8错误

时间:2010-05-02 07:45:17

标签: javascript

请转到here查看基于iframe的网络应用。 点击澳大利亚地图,选择一个城市,然后购买一些门票。 现在您将看到位于右下角的购物车表格。 问题出在IE8中,我无法从表中删除已检查的行; 而在其他浏览器中,如FireFox3.6,Opera10,Safari4和Chrome4,这个 行动没事。

以下是相关的javascript。它不使用jQuery作为要求的一部分 是不允许框架! iframe是我最好的选择,ajax会在这个限制下杀死我。

/* cartForm.js */
function toDeleteRoutes() //this function is executed before form is to be submitted.
{
if(document.getElementsByClassName('delete_box').length > 0) //there're rows to delete
{
    document.getElementById('cartForm').action ="./deleteRoutes.php";
    document.getElementById('cartForm').target ="section4";

    return true; //this enables the form to be submitted as usual.
}
else return false; //there is no more row in table to delete!   
}

function toSendEmail() //this function is executed before form is to be submitted.
{
document.getElementById('cartForm').action ="./sendEmail.php";
document.getElementById('cartForm').target ="section3";

document.getElementById('delete_btn').disabled = true; //disable delete button now
return true; //this enables the form to be submitted as usual.
}

function toCancelPurchase()
{
document.getElementById('cartForm').action ="./cancelPurchase.php";
document.getElementById('cartForm').target ="section4";

return true; //this enables the form to be submitted as usual.
}

我不知道哪个部分出了问题,或者这只是因为IE8螺丝钉所有?

1 个答案:

答案 0 :(得分:0)

您正在使用document.getElementsByClassName方法,IE上为not available

您应该包含自定义功能以获得此功能。

我个人喜欢Dustin Diaz implementation的略微修改版本:

function getElementsByClassName(node,classname) {
  if (node.getElementsByClassName) { // use native implementation if available!
    return node.getElementsByClassName(classname);
  } else {
    return (function getElementsByClass(searchClass,node) {
      if ( node == null )
        node = document;
      var classElements = [],
          els = node.getElementsByTagName("*"),
          elsLen = els.length,
          pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"), i, j;

      for (i = 0, j = 0; i < elsLen; i++) {
        if (pattern.test(els[i].className)) {
          classElements[j] = els[i];
          j++;
        }
      }
      return classElements;
    })(classname, node);
  }
}

查看以下文章,您可以使用大量实现: