我的应用程序中有一个选项,用户可以在其中停用其个人资料。只有管理员可以再次激活它们。
我有一个课程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;
}
答案 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";
答案 8 :(得分:-1)
由于jquery版本不正确,可能会发生此问题。像1.4等,不支持done方法
答案 9 :(得分:-1)
我有以下
document.getElementById("search-button") != null
除了ie8之外,在所有浏览器中都运行良好。 (我没有检查ie6或ie7)
我把它改成了
document.getElementById("searchBtn") != null
并更新了html中字段的id属性,现在可以在ie8
中使用