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

IT技术 javascript internet-explorer
2021-01-29 00:58:48

我的应用程序中有一个选项,用户可以在其中停用他们的个人资料。只有管​​理员可以再次激活它们。

我有一个ActivateProfile有两种方法的类

  • userExist(userName) 检查具有该用户名的用户是否存在并且他/她的个人资料是否已停用
  • activateAccountByUser(userName)再次激活用户的个人资料

我在输入类型按钮的单击事件上调用 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;
}
6个回答

经过几天的互联网搜索,我发现当 html 元素 id 与 javascript 函数中的某个变量具有相同的 id 时,通常会发生此错误。更改其中之一的名称后,我的代码运行良好。

我认为命名冲突不是根本原因。这发生在我身上是因为我的 javascript 对象上放错了花括号。当我调用该对象时,由于我的语法错误,它不存在。所以,我认为,浏览器做了下一个最好的事情,并抓取了同名的 DOM 元素。我通过让我的 javascript 花括号正确来修复它,而不是通过重命名我的 Javascript 对象。
2021-03-19 00:58:48
关于如何在大型代码库中找到命名冲突的任何提示?
2021-03-24 00:58:48
@TomMcDonald 在一个理智的世界中,下一个最好的事情是指出错误
2021-03-30 00:58:48

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

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

this.isAwesome();

Chrome、Firefox 和 Opera 很乐意接受这种语法。另一方面,IE 不会。因此,使用 JS 命名空间时最安全的选择是始终以实际命名空间为前缀。啦啦:

StackOverflow.isAwesome();
我不认为这是正确的...... Chrome 将绑定到“命名空间”但 IE 不会绑定的实例是什么?
2021-04-01 00:58:48
嗨,杰里米!不明白你的意思,能详细说说吗?
2021-04-11 00:58:48

我已经为相应的 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();   
使用var关键字对变量进行本地化解决了使用与元素的 id 相同的名称命名变量的问题——良好的调用。
2021-04-11 00:58:48

我的问题是type="application/javascript"<script>jQuery 标签上。IE8 不喜欢这个!如果您的网页是 HTML5,您甚至不需要声明类型,否则请type="text/javascript"改用。

就我而言,我有这样的代码:

function.call(context, arg);

我在 IE 下收到错误消息

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

在“函数”的主体中,我有“console.error”,当您的控制台关闭时,它会导致控制台对象未定义。我通过检查是否定义了 console 和 console.error 来解决这个问题