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

时间:2012-12-20 15:57:27

标签: javascript internet-explorer

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

我有一个课程ActivateProfile,有两个方法

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

我在输入类型按钮的click事件上调用JavaScript函数。此代码适用于Chrome和Mozilla,但在Internet Explorer上我收到此错误:

  

SCRIPT438:Object不支持属性或方法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");
         }
      }});
   }
}

以下是Activate个人资料类

的代码
 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;
}

10 个答案:

答案 0 :(得分:88)

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

答案 1 :(得分:8)

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

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

this.isAwesome();

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

StackOverflow.isAwesome();

答案 2 :(得分:5)

我为相应的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();   

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

function.call(context, arg);

我在IE

下收到错误消息
  

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

在'function'的主体中,我有“console.error”,当你的控制台关闭时,它会变成控制台对象未定义。我通过检查是否定义了console和console.error来修复此问题

答案 5 :(得分:0)

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

答案 6 :(得分:0)

在所有脚本代码中实施"use strict"以查找不一致并修复潜在的无范围变量!

答案 7 :(得分:0)

我们能够通过在导入的文件中添加Object.Assign polyfill并抛出错误来解决此问题。我们将其设置为最高导入,这样它将可用于堆栈中要调用的其他代码。

import "mdn-polyfills/Object.assign";

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

答案 8 :(得分:-1)

由于jquery版本不正确,可能会发生此问题。像1.4等,不支持done方法

答案 9 :(得分:-1)

我有以下

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

除了ie8之外,在所有浏览器中都运行良好。 (我没有检查ie6或ie7)

我把它改成了

document.getElementById("searchBtn") != null

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

中使用