2009-10-29 2 views
0

Может ли кто-нибудь сказать мне, почему это приведет к синтаксической ошибке в Safari, а не в Firefox?Ошибка синтаксиса jQuery в 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(""); 
     }); 
    }; 

Ошибка приходит здесь:

$ .class = $ (это) .attr ("класс");

Любое упрощение также приветствуется. Это прекрасно работает в firefox. Также вы можете спросить, почему это так сложно, но иногда у меня будет более одного из них на странице, поэтому мне нужна функция, чтобы узнать, какой из них обрабатывать.

Спасибо.

+0

Может помочь, если вы сузили его до линии, на которой вы получаете ошибку. –

+0

Попробовал ли вы по-другому, может быть, просто 'var class = $ (this) .attr (" class ");'? – Gumbo

+2

Джонатан Лоновски дал правильный ответ, но стоит также отметить, что назначение временных переменных как свойств объекта jQuery, вероятно, не очень хорошая идея. Это может легко привести к проблемам с плагинами, которые вы добавляете позже, или улучшениям в более поздних версиях jQuery. Просто используйте локальную переменную: 'var class = $ (this) .attr (" class ");' – NickFitz

ответ

5

Вы не можете определить свойства/переменные, названные в честь зарезервированного слова - например, class.

Именно поэтому вы найдете Element.className вместо Element.class в DOM.

Для их список см https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words

+0

+1. Кроме того, причина, по которой он работает в Firefox, заключается в том, что это ограничение на идентификаторы свойств будет удалено в следующей спецификации ECMAScript версии 5, а последние версии Firefox уже реализуют некоторые части этой спецификации. – NickFitz

+0

Отличное спасибо Джонатан. Любые предложения по упрощению этого кода? – jay

0

попробовать заменить $ .class с чем-то другим обусловленно я думаю, что для некоторого браузера слово «класс» зарезервирован.

Смежные вопросы