SCRIPT438: L'objet ne supporte pas la propriété ou la méthode IE

j'ai une option dans mon application où les utilisateurs peuvent désactiver leur profils. Seul l'administrateur peut activer de nouveau.

j'ai une classe ActivateProfile avec deux méthodes

  • userExist(userName) qui vérifie si l'utilisateur avec ce nom d'utilisateur existe et son profil est désactivé
  • et activateAccountByUser(userName) qui activent le profil de l'utilisateur à nouveau

j'appelle une fonction JavaScript sur l'événement click d'un bouton de type. Ce code fonctionne très bien sur Chrome et Mozilla, mais sur Internet Explorer je reçois cette erreur:

SCRIPT438: Objet ne prend pas en charge la propriété ou de la méthode 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");
         }
      }});
   }
}

voici le code pour activer la classe de profil

 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;
}
53
demandé sur Dave Cousineau 2012-12-20 19:57:27

9 réponses

après quelques jours de recherche sur Internet, j'ai constaté que cette erreur se produit généralement lorsqu'un élément html id a le même id qu'une variable de la fonction javascript. Après la modification du nom de l'un d'eux mon code fonctionnait bien.

78
répondu vikifor 2016-02-11 01:11:19

C'est un problème courant dans les applications web qui emploient JavaScript namespacing. Quand c'est le cas, le problème 99,9% du temps est L'incapacité de IE à lier les méthodes dans l'espace de noms courant au mot-clé "this".

par exemple, si j'ai L'espace de noms JS" StackOverflow "avec la méthode"isAwesome". Normalement, si vous êtes dans l'espace de noms "Stackoverlow", vous pouvez invoquer la méthode "isAwesome" avec la syntaxe suivante:

this.isAwesome();

Chrome, Firefox et Opera accepteront volontiers cette syntaxe. C'est-à-dire que d'un autre côté, non. Ainsi, le pari le plus sûr lors de L'utilisation de l'espace de noms JS est de toujours préfixer avec l'espace de noms réel. A la:

StackOverflow.isAwesome();
7
répondu pimbrouwers 2014-08-28 14:11:11

j'ai ajouté var pour toutes les variables dans le JavaScript correspondant. Cela a résolu le problème dans IE.

Code Précédent

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

Nouveau 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
répondu Suman-PHP4U 2013-03-04 12:33:07

mon problème était d'avoir type="application/javascript" sur l'étiquette <script> pour jQuery. IE8 n'aime pas ça! Si votre page web est HTML5 vous n'avez même pas besoin de déclarer le type, sinon allez avec type="text/javascript" à la place.

1
répondu Lynxy 2013-11-15 21:37:24

dans mon cas, j'avais le code suivant:

function.call(context, arg);

j'ai eu un message d'erreur sous IE

TypeError: Objet ne prend pas en charge la propriété ou de la méthode "erreur"

dans le corps de "fonction" que j'avais " console.erreur" et il s'avère que la console est indéfini lorsque votre console est fermée. J'ai corrigé cela en vérifiant si la console et la console.erreur définie

1
répondu osoitza 2016-01-27 12:59:06

j'ai oublié d'utiliser var sur mon élément variable

code Incorrect:

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

code Correct:

var itemCreateInfo = new SP.ListItemCreationInformation();
var item = list.addItem(itemCreateInfo);  
item.set_item('Title', 'Haytham - Oil Eng');
0
répondu Jamil Haddadin 2015-09-23 03:29:46

implémenter "use strict" dans toutes les balises de script pour trouver des incohérences et corriger des variables potentielles non contrôlées!

0
répondu Alex 2018-04-15 18:22:17

ce problème peut se produire en raison de la version incorrecte de jquery. comme 1.4 etc. où faire la méthode n'est pas pris en charge

-1
répondu Sameer 2013-11-18 11:11:06

j'ai eu la suivante

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

qui a bien fonctionné dans tous les navigateurs, sauf ie8. ( Je n'ai pas vérifier ie6 ou ie7)

Je l'ai changé en

document.getElementById("searchBtn") != null

et mis à jour l'attribut id sur le champ dans mon html et il fonctionne maintenant dans ie8

-1
répondu blong824 2013-12-20 19:01:23