SCRIPT438: объект не поддерживает свойство или метод IE



у меня есть опция в моем приложении, где пользователи могут деактивировать свои профили. Только администратор может активировать их снова.



у меня есть класс ActivateProfile С двумя методами





  • userExist(userName) это проверяет, если пользователь с этим именем пользователя существует и его / ее профиль деактивирован

  • и activateAccountByUser(userName) активировать профиль пользователя снова


Я вызываю функцию JavaScript на событие click кнопки типа ввода. Этот код отлично работает в 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;
}
774   9  

9 ответов:

после нескольких дней поиска в Интернете я обнаружил, что эта ошибка обычно возникает, когда идентификатор элемента html имеет тот же идентификатор, что и некоторая переменная в функции javascript. После изменения имени одного из них мой код работал нормально.

Это распространенная проблема в веб-приложениях, которые используют пространство имен JavaScript. Когда это так, проблема 99,9% времени-это неспособность IE привязать методы в текущем пространстве имен к ключевому слову "this".

например, если у меня есть пространство имен JS "StackOverflow" с методом "isAwesome". Обычно, если вы находитесь в пространстве имен "StackOverflow", вы можете вызвать метод" isAwesome " со следующим синтаксисом:

this.isAwesome();

хром, Firefox и Opera с радостью примут этот синтаксис. Т. е. с другой стороны, не будет. Таким образом, самая безопасная ставка при использовании пространства имен JS-это всегда префикс с фактическим пространством имен. А-ля:

StackOverflow.isAwesome();

я добавил var для всех переменных в соответствующем javascript. Это решило проблему в 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();   

у меня была проблема type="application/javascript" на <script> тег для jQuery. IE8 это не нравится! Если ваша веб-страница HTML5, вам даже не нужно объявлять тип, иначе идите с type="text/javascript" вместо.

в моем случае у меня был такой код:

function.call(context, arg);

Я получил сообщение об ошибке под IE

TypeError: объект не поддерживает свойство или метод 'error'

в теле "функции", у меня была приставка".ошибка " и оказывается, что объект консоли не определен, когда ваша консоль закрыта. Я исправил это, проверив, если консоль и консоль.ошибки определяются

Я забыл использовать 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');

реализовать "use strict" во всех тегах скрипта, чтобы найти несоответствия и исправить потенциальные переменные без области видимости!

эта проблема может возникнуть из-за неправильной версии jquery. как и 1.4 и т. д. где done метод не поддерживается

у меня было следующее

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

который отлично работал во всех браузерах, кроме ie8. (Я не проверял ie6 или ie7)

Я изменил его на

document.getElementById("searchBtn") != null

и обновил атрибут id в поле в моем html, и теперь он работает в ie8

Comments

    Ничего не найдено.