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



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

我有一个类ActivateProfile有两个方法

  • userExist(userName)检查该用户是否存在并且他/她的配置文件已停用
  • activateAccountByUser(userName)再次激活用户配置文件

在输入类型按钮的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");
         }
      }});
   }
}
下面是激活配置文件类 的代码
 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;
}

在互联网上搜索了几天后,我发现这个错误通常发生在html元素id与javascript函数中的某些变量id相同的时候。在更改了其中一个的名称后,我的代码工作得很好

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

例如,如果我有一个JS命名空间"StackOverflow"和方法"isAwesome"。通常,如果你在"StackOverflow"命名空间内,你可以用以下语法调用"isAwesome"方法:

this.isAwesome();

Chrome、Firefox和Opera都很乐意接受这种语法。另一方面,IE则不会。因此,在使用JS名称空间时,最安全的做法是始终使用实际的名称空间作为前缀。洛杉矶:

StackOverflow.isAwesome();

我已经为相应javascript中的所有变量添加了var。这就解决了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();   

我的问题是有type="application/javascript"上的<script>标记的jQuery。IE8不喜欢这样!如果你的网页是HTML5,你甚至不需要声明类型,否则就用type="text/javascript"代替。

在我的例子中我有这样的代码:

function.call(context, arg);

IE下出现错误信息

TypeError: Object不支持属性或方法'error'

在'function'的主体中,我有"console "。Error ",当控制台关闭时,控制台对象变为未定义。我已经通过检查控制台和控制台解决了这个问题。错误定义

我忘记在项目变量

上使用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');

在所有脚本标签中实现"use strict",以发现不一致并修复潜在的未限定作用域的变量!

我们可以通过添加Object来解决这个问题。为导入的文件分配填充并抛出错误。我们将它设置为最高的导入,这样它就可以被堆栈中调用的其他代码使用。

import "mdn-polyfills/Object.assign";

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign Polyfill

可能是由于jquery版本不匹配导致的。如1.4等不支持done方法

我有以下内容

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

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

我改成

document.getElementById("searchBtn") != null

和更新了id属性的字段在我的HTML,它现在在ie8

最新更新