【问题标题】:SCRIPT438: Object doesn't support property or method IESCRIPT438:对象不支持属性或方法 IE
【发布时间】:2012-12-20 15:57:27
【问题描述】:

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

我有一个类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;
}

【问题讨论】:

  • 接受了 16 个问题中的 2 个??
  • 尝试发布您的课程ActivateProfile。

标签: javascript internet-explorer


【解决方案1】:

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

【讨论】:

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

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

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

this.isAwesome();

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

StackOverflow.isAwesome();

【讨论】:

  • 我不认为这是正确的...... Chrome 将绑定到“命名空间”但 IE 不会绑定的实例是什么?
  • 嗨杰里米!我不确定你的意思,你能详细说明一下吗?
【解决方案3】:

我已经为对应的 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 同名的问题——良好的调用。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    function.call(context, arg);
    

    我在 IE 下收到错误消息

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

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

    【讨论】:

      【解决方案6】:

      我忘记在我的项目变量上使用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');
      

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          我们能够通过将 Object.Assign polyfill 添加到正在导入的文件并引发错误来解决此问题。我们将把它设为最高的导入,这样它就可以被堆栈中的其他代码调用。

          import "mdn-polyfills/Object.assign";

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

          【讨论】:

            【解决方案9】:

            此问题可能是由于 jquery 版本不正确造成的。像 1.4 等不支持 done 方法的地方

            【讨论】:

              【解决方案10】:

              我有以下

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

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

              我改成

              document.getElementById("searchBtn") != null
              

              并更新了我的 html 中字段的 id 属性,现在它可以在 ie8 中使用了

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-22
                • 2019-02-09
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多