SCRIPT438:对象不支持属性或方法IE

我在我的应用程序中有一个选项,用户可以停用他们的configuration文件。 只有pipe​​理员可以再次激活它们。

我有一个类ActivateProfile有两个方法

  • userExist(userName) ,用于检查具有该用户名的用户是否存在,并且他/她的configuration文件被停用
  • activateAccountByUser(userName)再次激活用户的configuration文件

我在inputtypesbutton的click事件上调用JavaScript函数。 此代码在Chrome和Mozilla上正常工作,但在Internet Explorer上出现此错误:

SCRIPT438:对象不支持属性或方法userExist

 function activateProf() { var userName=document.getElementById("userName").value; if (userName == "") { alert("Полето е задолжително"); } else { alert(userName + "1"); ActivateProfile.userExist(userName, { callback:function(exist) { if (userName) { ActivateProfile.activateAccountByUser(userName); alert("User is activated"); } else { alert("User does not exist"); } }}); } } 

这里是激活configuration文件类的代码

  public void activateAccountByUser(String userName) { try { Connection c = DBComm.getInstance().getConnection(); Statement s = c.createStatement(); ResultSet set = s.executeQuery("select * from accounts where userName = '" + userName + "' and isauthorized='2'"); if (set.next()) { Statement st = c.createStatement(); st.executeUpdate("update accounts set isauthorized='1' where userName='" + userName + "' and isauthorized='2'"); } s.close(); c.close(); } catch (Exception ex) { java.util.logging.Logger.getLogger(ActivateProfile.class.getName()).log(Level.SEVERE, null, ex); } } public boolean userExist(String userName) throws SQLException { //true exist //false does not exist boolean existEmbg = false; try { Connection c = DBComm.getInstance().getConnection(); Statement s = c.createStatement(); ResultSet set = s.executeQuery("select * from accounts where userName = '" + userName + "' and isauthorized='2'"); if (set.next()) { existEmbg = true; } else { existEmbg = false; } s.close(); c.close(); } catch (Exception ex) { java.util.logging.Logger.getLogger(ActivateProfile.class.getName()).log(Level.SEVERE, null, ex); } return existEmbg; } 

在search互联网后的一些日子里,我发现这个错误通常发生在html元素id与javascript函数中的某个variables具有相同的id时。 改变其中一个人的名字后,我的代码工作正常。

这是使用JavaScript命名空间的Web应用程序中的一个常见问题。 在这种情况下,99.9%的问题是IE无法将当前命名空间内的方法绑定到“this”关键字。

例如,如果我有方法“isAwesome”的JS命名空间“StackOverflow”。 通常情况下,如果您在“StackOverflow”命名空间内,则可以使用以下语法调用“isAwesome”方法:

 this.isAwesome(); 

Chrome,Firefox和Opera会高兴地接受这个语法。 IE另一方面,不会。 因此,使用JS命名空间时最安全的select是始终以实际名称空间作为前缀。 阿拉:

 StackOverflow.isAwesome(); 

我已经添加了var的所有variables在corrosponding的JavaScript。 这解决了IE中的问题。

以前的代码

 billableStatus = 1 ; var classStr = $(this).attr("id").split("_"); date = currentWeekDates[classStr[2]]; // Required activityNameId = "initialRows_" + classStr[1] + "_projectActivityName"; activityId = $("#"+activityNameId).val(); var projectNameId = "initialRows_" + classStr[1] + "_projectName" ; projectName = $("#"+projectNameId).val(); var timeshitEntryId = "initialRows_"+classStr[1]+"_"+classStr[2]; timeshitEntry = $("#"+timeshitEntryId).val(); 

新代码

 var billableStatus = 1 ; var classStr = $(this).attr("id").split("_"); var date = currentWeekDates[classStr[2]]; // Required var activityNameId = "initialRows_" + classStr[1] + "_projectActivityName"; var activityId = $("#"+activityNameId).val(); var projectNameId = "initialRows_" + classStr[1] + "_projectName" ; var projectName = $("#"+projectNameId).val(); var timeshitEntryId = "initialRows_"+classStr[1]+"_"+classStr[2]; var timeshitEntry = $("#"+timeshitEntryId).val(); 

我的问题是在jQuery的<script>标签上type="application/javascript" 。 IE8不喜欢这个! 如果你的网页是HTML5,你甚至不需要声明types,否则用type="text/javascript"来代替。

在我的情况下,我有这样的代码:

 function.call(context, arg); 

我在IE下得到了错误信息

TypeError:对象不支持属性或方法“错误”

在“函数”的主体中,我有“console.error”,并且当你的控制台closures时,控制台对象是不确定的。 我已经通过检查console和console.error是否定义来解决这个问题

我忘了在我的itemvariables上使用var

不正确的代码:

 var itemCreateInfo = new SP.ListItemCreationInformation(); item = list.addItem(itemCreateInfo); item.set_item('Title', 'Haytham - Oil Eng'); 

正确的代码:

 var itemCreateInfo = new SP.ListItemCreationInformation(); var item = list.addItem(itemCreateInfo); item.set_item('Title', 'Haytham - Oil Eng'); 

这个问题可能是由于不正确的jQuery版本发生的。 像1.4等不完整的方法不支持

我有以下

 document.getElementById("search-button") != null 

在ie8以外的所有浏览器中工作正常。 (我没有检查ie6或ie7)

我改变了

 document.getElementById("searchBtn") != null 

并更新我的HTML字段上的id属性,现在在ie8中工作