Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SCRIPT438:对象没有';不支持属性或方法_Javascript_Internet Explorer - Fatal编程技术网

Javascript SCRIPT438:对象没有';不支持属性或方法

Javascript SCRIPT438:对象没有';不支持属性或方法,javascript,internet-explorer,Javascript,Internet Explorer,我的应用程序中有一个选项,用户可以停用他们的配置文件。只有管理员可以再次激活它们 我有一个类ActivateProfile,有两种方法 userExist(userName)用于检查具有该用户名的用户是否存在,以及其个人资料是否已停用 和activateAccountByUser(用户名),再次激活用户的配置文件 我在输入类型按钮的单击事件上调用JavaScript函数。这段代码在Chrome和Mozilla上运行良好,但在Internet Explorer上出现以下错误: SCRIPT43

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

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

  • userExist(userName)
    用于检查具有该用户名的用户是否存在,以及其个人资料是否已停用
  • activateAccountByUser(用户名)
    ,再次激活用户的配置文件
我在输入类型按钮的单击事件上调用JavaScript函数。这段代码在Chrome和Mozilla上运行良好,但在Internet Explorer上出现以下错误:

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

下面是激活配置文件类的代码

 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中的所有变量添加了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();   

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

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

document.getElementById("search-button") != null
它在除ie8之外的所有浏览器中都运行良好。(我没有检查ie6或ie7)

我把它改成了

document.getElementById("searchBtn") != null

并在my html中更新了字段上的id属性,现在它在ie8中工作了这是使用JavaScript名称空间的web应用程序中的一个常见问题。在这种情况下,99.9%的问题是IE无法将当前命名空间中的方法绑定到“this”关键字

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

this.isAwesome();
Chrome、Firefox和Opera将乐于接受这种语法。另一方面,我不会。因此,在使用JS名称空间时,最安全的方法是始终使用实际名称空间作为前缀。A洛杉矶:

StackOverflow.isAwesome();

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

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

function.call(context, arg);
我收到IE下的错误消息

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


在“function”的主体中,我有“console.error”,当控制台关闭时,console对象是未定义的。我通过检查console和console.error是否在所有脚本标记中定义了

Implement
“use strict”
来查找不一致性并修复潜在的未作用域变量,从而解决了这个问题

我们可以通过添加对象来解决此问题。将polyfill分配给要导入的文件并抛出错误。我们将使它成为最高的导入,这样它将可用于堆栈中要调用的其他代码

导入“mdn polyfills/Object.assign”


接受了16个问题中的第2个问题??尝试发布你的类ActivateProfile。使用
var
关键字本地化变量解决了使用与元素id相同的名称命名变量的问题——很好的调用。关于如何在大型代码库中查找命名冲突的任何提示?查找冲突的解决方案:,或者我认为命名冲突不是根本原因。这发生在我身上,是因为我的javascript对象上有一个错误的大括号。当我调用该对象时,由于语法错误,它不存在。因此,我认为,浏览器做了次好的事情,抓住了同名的DOM元素。我通过更正javascript大括号来修复它,而不是重命名我的javascript对象。@TomMcDonald在理智的世界中,下一个最好的方法是指出错误,我认为这不正确。。。什么是Chrome将绑定到“名称空间”但IE不会绑定的实例?嗨,Jeremy!我不知道你的意思,你能详细说明一下吗?
function.call(context, arg);