IE11中的Java脚本错误,但在IE9中正常工作

时间:2014-05-08 13:17:31

标签: javascript

if ((document.getElementById('rank').value != '01') && (document.getElementById('rank').value != '04') && (document.getElementById('CkbxSecondeePartner').checked)) {
  alert('The rank of the employee is not at the Partner level.  Only Active Partners can be on secondment');

  divObj.style.display = 'none'; //hides
  document.getElementById('CkbxSecondeePartner').checked = false;
}

错误显示在:

((document.getElementById('rank').value != '01') can not read property 'value' of null)

3 个答案:

答案 0 :(得分:1)

IE有一个bug,其getElementById(id)实现(only fixed if you are running in standards mode)。

在IE中,getElementById(id)实际上将返回具有匹配name属性的元素,即使这是完全无效的匹配。 (再次,如果没有在标准模式下运行)

因此,如果您正在测试的其中一个浏览器正在应用不同的呈现模式(代码可能以不同方式提供,或者您可能已经篡改了开发人员工具),您可能会看到不同的结果。

此外,如果您不确定是否匹配,请务必先测试该元素。

var rankField = document.getElementById('rank');
if(rankField && rankField.value != '01'){
  //...
}

答案 1 :(得分:0)

我建议您在尝试访问其属性之前验证您的元素:

if (document.getElementById('rank') && document.getElementById('CkbxSecondeePartner')) {
  if ((document.getElementById('rank').value != '01') && (document.getElementById('rank').value != '04') && (document.getElementById('CkbxSecondeePartner').checked)) {
    alert('The rank of the employee is not at the Partner level.  Only Active Partners can be on secondment');

    divObj.style.display = 'none'; //hides
    document.getElementById('CkbxSecondeePartner').checked = false;
  }
}

答案 2 :(得分:0)

希望没有人对IE11的问题作出回应。相同的脚本适用于IE 8或9,但不适用于IE11。在大多数页面中使用javascripts的遗留应用程序的问题都有问题。

而不是 (document.getElementById('rank')。value!='01')

使用 (document.getElementById('rank')!='01')

这可以解决你的问题。

实际问题是,我们无法对包含300万行代码的旧系统进行此更改,我们无法在任何地方进行此更改