2009-10-29 3 views
0

Quelqu'un peut-il me dire pourquoi cela générerait une erreur de syntaxe dans Safari et non dans Firefox?jQuery Erreur de syntaxe dans Safari

toggle = function(){ 
     $("#type_new").hide(); 
     $("a[class^='toggle']").unbind('click').click(function(){ 
      $.class = $(this).attr("class"); 
      if($(":input."+$.class+".text").is(':visible')==true) $(this).find("small").html("Add New Type"); else $(this).find("small").html("Choose From Exisiting Types"); 
      $(":input."+$.class+".select").toggle(); 
      $(":input."+$.class+".text").toggle().val(""); 
     }); 
    }; 

L'erreur vient ici:

$ .class = $ (this) .attr ("classe");

Toute simplification est la bienvenue également. Cela fonctionne très bien dans Firefox. Aussi, vous pourriez vous demander pourquoi c'est si compliqué mais parfois j'en aurai plus d'un sur une page, j'ai donc besoin de la fonction pour savoir laquelle gérer.

Merci.

+0

Cela pourrait vous aider si vous réduisiez la ligne sur laquelle vous obtenez l'erreur. –

+0

L'avez-vous essayé d'une manière différente, peut-être simplement 'var class = $ (this) .attr (" class ");'? – Gumbo

+2

Jonathan Lonowski a donné la bonne réponse, mais il est également intéressant de souligner que l'attribution de variables temporaires en tant que propriétés de l'objet jQuery n'est probablement pas une très bonne idée. Cela pourrait facilement entraîner des problèmes avec les plugins que vous ajouterez ultérieurement ou des améliorations dans les versions ultérieures de jQuery. Utilisez simplement une variable locale: 'var class = $ (this) .attr (" class ");' – NickFitz

Répondre

5

Vous ne pouvez pas définir les propriétés/variables nommées après un mot réservé, par exemple class.

C'est pourquoi vous trouvez Element.className au lieu de Element.class dans DOM.

Pour une liste d'entre eux, voir https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words

+0

+1 En outre, la raison pour laquelle cela fonctionne dans Firefox est que cette restriction sur les identifiants de propriété sera supprimée dans la prochaine spécification ECMAScript version 5, et les versions récentes de Firefox implémentent déjà certaines parties de cette spécification. – NickFitz

+0

Excellent merci Jonathan. Des suggestions sur la simplification de ce code? – jay

0

essayer de remplacer .class $ par autre chose beacause je pense que pour un certain navigateur le mot « classe » est réservé.