Jump to content
  • 0

Ошибки при использовании "тире" и "подчёркивания" в названиях классов и id


clavin
 Share

Question

Замечал для javascript одну особенность, что если называть идентификаторы, используя символы тире в них, то при исполнении javascript происходит ошибка. Например, это заметно в браузере IE6. Сам по себе символ тире разрешён стандартами для применения в html-разметке, но по-моему, он некорректно задействуется в javascipt.

Например, я заметил, что нельзя называть какую-нибудь функцию javascript именем, совпадающую с именем какого-либо идентификатора в разметке. Название идентификатора будет использоваться как название переменной в javascript.

Замечал ли кто-нибудь ещё такие особенности и в каких браузерах? Надо ли ограничивать использование символа тире в названиях классов и идентификаторов?

Link to comment
Share on other sites

20 answers to this question

Recommended Posts

  • 0

Ну, во-первых, тире (—) вроде как вообще нельзя применять в названиях переменных и прочих вещах. Можно использовать символ «минус» (-). А во-вторых, я считаю некультурным называть переменные, используя этот знак. Для упрощения чтения длинных названий лучше использовать что-то типа «veryLongName», то есть разделять слова заглавными буквами. И проблемы рассосутся сами собой.

Link to comment
Share on other sites

  • 0
Я тут узнал, что по научному америкосски это называется camel style (или camelize).

Клёво. Надо будет запомнить. Вообще, я считаю, что надо следить за стилем кода. Например, одна из вещей, за которую я ненавижу PHP, так это то, что даже стандартные функции все называются хрен знает как: то с нижним подчёркиванием, то в одно слово, имена просто запредельной длины. В яваскрипте такого нет (кроме запредельной длины) — там вроде всё как раз называется при помощи верблюд-стайл (getElementById). Ну и надо весь остальной код «подгонять» под этот стиль — это грамотно и читабельно получится.

Link to comment
Share on other sites

  • 0

По нотации в html можно использовать знак "-". Но это в html, а не в JavaScript. :)

Вообще, в большинстве языков программирования в идентификаторах используются латинские буквы, цифры (не в начале слова) и знак "_". Даже если что-то другое разрешено, то использовать это не принято, т.к. читаемость портится. Я сам знак "_" тоже не использую. Сбивает он как-то.

Edited by ZI DAN
Link to comment
Share on other sites

  • 0

Вот вам из книги Петра Ташкова "ВЕБ МАСТЕРИНГ на 100%"

Некоторые имена не могут быть использованы, т.к. имеют особый смысл. Ограничения:

1. Все идентификаторы должны начинаться с буквы.

2. После первой буквы остальными символами могут быть буквы и цифры.

3. буквами считаются заглавные и строчные буквы англ алфавита A-Z, a-z.

4. Символ подчеркивания (_) выступает в качестве буквы, заменяя пробел, который нельзя использовать.

5. Символ ($) выступает в качестве буквы и обычно используется при автоматической генерации кода.

P.S. Ну вот. Тире или минуса тут нет.

Link to comment
Share on other sites

  • 0

Неудачный пример. Кто такой Ташков, что на него можно ссылаться?

Вот правильный пруфлинк

http://www.w3.org/TR/CSS21/syndata.html#characters

Во втором абзаце сверху написано, что в CSS допускается символ дефиса и подчеркивания. Теперь что касается JavaScript. Проблем быть не должно, поскольку имена классов берутся в кавычки и воспринимаются уже как строковый параметр. Но это в теории, на практике MSDN утверждает, что да, возможны ошибки и советует использовать символ подчеркивания.

Link to comment
Share on other sites

  • 0
нельзя называть какую-нибудь функцию javascript именем, совпадающую с именем какого-либо идентификатора в разметке. Название идентификатора будет использоваться как название переменной в javascript

Есть в IE такая неприятная особенность. Для каждого ID создается незатираемая глобальная переменная, ссылающаяся на этот элемент. По ней можно обратиться к элементу без всяких getElementById и document.all, но именовать переменные (в т.ч. функции) приходится с оглядкой на это. IE8 вроде от этой беды вылечили, но в обоих его режимах совместимости бывают рецидивы.

Еще те же IE любят путать ID и name (getElementById может вернуть элемент по любому из них). Верная страховка - по возможности избегать name вообще, а для элементов форм делать id и name одинаковыми (кроме радиокнопок, где это не получается).

Link to comment
Share on other sites

  • 0

Я прихожу к выводу, что надо избегать и символ подчёркивания и символ тире в названиях классов и идентификаторов. ^_^ Или хотя бы для тех элементов, с которыми javascript задействован. Здесь много точек зрения можно увидеть, могут ли такие символы приводить к ошибкам в javascript'е

Если говорить о разметке, а не о javascript, то я замечал, что в старых версиях браузера Опера разметка ломается, если в ней есть классы или идентификаторы, содержащие символ подчёркивания.

Edited by clavin
Link to comment
Share on other sites

  • 0

Зачем выяснять - где, когда и в каких браузерах можно пользоваться специальными символами, если можно называть исключительно буквами и не беспокоится о результате? ^_^

Link to comment
Share on other sites

  • 0

Полностью согласен. Я даже один раз макет так сверстал без символов тире и подчёркивания. Читабильность кода при этом было очень низкая, но зато я был уверен в результате ^_^ Надо будет подробно это вопрос поизучать, при каких обстоятельствах ошибка (или предупреждения) с этими символами возникает, а то без наглядного примера обсуждать это не очень правильно.

Link to comment
Share on other sites

  • 0

А я вот не согласен! Раз есть такая возможность, надо ей пользоваться и не кивать на гипотетические ошибки. Пока поиск ошибок по разным буржуйским сайтам и форумам ни к чему конкретному не привел. Вроде как утверждают что да, возникают баги, но явных примеров нет. Так что если кто обнаружит, ссылку обязательно сюда выложить.

Link to comment
Share on other sites

  • 0

Дэвид Флэнаган - автор этой прекрасной книги http://www.ozon.ru/context/detail/id/3881091/ утверждает, что использование тире в названиях переменных и т.д недопустимо, так как знак тире в JS означает знак минус, в следствии чего это будет считаться ошибкой и браузер вам незамедлительно об этом сообщит.

А вот знак подчёркивания, либо верблюжья нотация - это как раз то, что нужно и МОЖНО использовать в названиях.

Я склонен доверять этому человеку, да и правдивость его слов я тестил 100 раз, ошибок не было ни разу.

Link to comment
Share on other sites

  • 0

Здесь проблема в том, что знак подчёркивания не допустим в CSS1 (ссылку я давал выше), но допустим в javascript. В тоже время символ тире допустим в CSS1, CSS2, но вроде что-то там с javscript'ом происходит. К сожалению, конкретный пример такой ошибки привести не могу, т.к. не сохранил его, а по памяти восстановить не получается. Если снова "повезёт" и нарвусь на это баг, выложу на форум пример.

Link to comment
Share on other sites

  • 0
нефиг по className находить элементы

Я не согласен. Вещь действительно удобная, а в новых браузерах для нее предусмотрен целый нативный метод. Аргумент — строка, в строке может быть почти что угодно. Подозреваю, что проблемы в IE как раз с id-ами — именно из-за неявного создания глобалок (сам не сталкивался, т.к. дефисами в id не пользуюсь)...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy