it-swarm.com.de

SCRIPT438: Das Objekt unterstützt keine Eigenschaften oder Methoden IE

Ich habe in meiner Anwendung eine Option, mit der Benutzer ihre Profile deaktivieren können. Nur der Admin kann sie wieder aktivieren.

Ich habe eine Klasse ActivateProfile mit zwei Methoden

  • userExist(userName) überprüft, ob ein Benutzer mit diesem Benutzernamen existiert und sein Profil deaktiviert ist
  • und activateAccountByUser(userName), die das Profil des Benutzers erneut aktivieren

Ich rufe eine JavaScript-Funktion für das Klickereignis einer Eingabetaste auf. Dieser Code funktioniert gut in Chrome und Mozilla, aber in Internet Explorer wird diese Fehlermeldung angezeigt:

SCRIPT438: Objekt unterstützt nicht die Eigenschaft oder Methode 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");
         }
      }});
   }
}

Hier ist der Code für die Activate-Profilklasse

 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;
}
55
vikifor

Nachdem ich einige Tage im Internet gesucht hatte, stellte ich fest, dass dieser Fehler normalerweise auftritt, wenn eine HTML-Element-ID dieselbe ID hat wie eine Variable in der Javascript-Funktion. Nachdem ich den Namen einer von ihnen geändert hatte, funktionierte mein Code einwandfrei.

85
vikifor

Dies ist ein häufiges Problem bei Webanwendungen, die JavaScript-Namespaces verwenden. Wenn dies der Fall ist, besteht das Problem 99,9% der Zeit darin, dass der IE keine Methoden im aktuellen Namespace an das Schlüsselwort "this" binden kann. 

Wenn ich beispielsweise den JS-Namensraum "StackOverflow" mit der Methode "isAwesome" habe. Wenn Sie sich innerhalb des Namespace "StackOverflow" befinden, können Sie die Methode "isAwesome" normalerweise mit der folgenden Syntax aufrufen:

this.isAwesome();

Chrome, Firefox und Opera akzeptieren diese Syntax gerne. IE dagegen nicht. Daher ist es bei der Verwendung von JS-Namespaces der sicherste Einsatz, immer den tatsächlichen Namespace voranzustellen. A la:

StackOverflow.isAwesome();
8
pimbrouwers

Ich habe var für alle Variablen im entsprechenden Javascript hinzugefügt .. _ Das hat das Problem im IE gelöst.

Vorheriger Code

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();   

Neuer Code

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();   
5
Suman-PHP4U

Mein Problem war, type="application/javascript" auf dem <script>-Tag für jQuery zu haben. IE8 mag das nicht! Wenn Ihre Webseite HTML5 ist, müssen Sie nicht einmal den Typ angeben, ansonsten gehen Sie stattdessen mit type="text/javascript".

1
Lynxy

In meinem Fall hatte ich folgenden Code:

function.call(context, arg);

Ich habe eine Fehlermeldung unter IE erhalten. 

TypeError: Objekt unterstützt weder die Eigenschaft noch die Methode 'error'.

Im Hauptteil von 'function' hatte ich "console.error" und es wird das Konsolenobjekt undefiniert, wenn Ihre Konsole geschlossen wird. Ich habe das Problem behoben, indem überprüft wurde, ob console und console.error definiert sind

1
osoitza

Implementieren Sie "use strict" in allen Skript-Tags, um Inkonsistenzen zu finden und mögliche nicht definierte Variablen zu beheben!

0
Alex

Wir konnten dieses Problem lösen, indem Sie den zu importierenden Dateien Polyfill Object.Assign hinzufügen und den Fehler auslösen. Wir würden es zum höchsten Import machen, auf diese Weise wäre es für den anderen Code verfügbar, der im Stack aufgerufen werden soll. 

import "mdn-polyfills/Object.assign";

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

0

Ich habe vergessen, var für meine Artikelvariable zu verwenden

Falscher Code: 

var itemCreateInfo = new SP.ListItemCreationInformation();
item = list.addItem(itemCreateInfo); 
item.set_item('Title', 'Haytham - Oil Eng'); 

Korrekter Code: 

var itemCreateInfo = new SP.ListItemCreationInformation();
var item = list.addItem(itemCreateInfo);  
item.set_item('Title', 'Haytham - Oil Eng');
0
Jamil Haddadin