Подтвердить что ты не робот

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

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

У меня есть класс 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;
}
4b9b3361

Ответ 1

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

Ответ 2

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

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

this.isAwesome();

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

StackOverflow.isAwesome();

Ответ 3

Я добавил 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();   

Ответ 4

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

Ответ 5

В моем случае у меня был код вроде этого:

function.call(context, arg);

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

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

В теле "function" у меня был "console.error", и этот консольный объект становится undefined, когда консоль закрыта. Я исправил это, проверив, определены ли console и console.error.

Ответ 6

Я забыл использовать var в моей переменной item

Неверный код:

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

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

Ответ 8

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

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

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

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

document.getElementById("searchBtn") != null

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