Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Странная проблема с валидотором и JavaScript (https://javascript.ru/forum/dom-window/34688-strannaya-problema-s-validotorom-i-javascript.html)

Викториан 15.01.2013 10:34

Странная проблема с валидотором и JavaScript
 
Вложений: 1
Делаю плагин кнопок социальных сетей для одной CMS'ки, с динамической подгрузкой самих кнопок в зависимости от местонахождения на сайте, и наткнулся на проблему с валидатором. Сам сайт полностью валидный, и код я писал тоже валидный, но валидатор почему-то не считает мой труд оправданным.
А именно, есть код на JS:
<span class="knopka">
  <span onClick="showhide('share_span');" style="cursor: pointer;">Поделиться</span>
  <span id="share_span" style="display: none;"></span>
 </span>
<script type="text/javascript">
obj('share_span').innerHTML=
' <span class="yashare-auto-init" data-yashareL10n="ru" data-yashareType="none"'+
' data-yashareQuickServices="vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus"></span>';
</script>

Валидатор выдает мне не совсем понятный результат:
http://javascript.ru/forum/attachmen...d=135823144 6
Я понимаю, что означает эта ошибка, но почему она возникает на JS строке? Валидатору интересно, что я передаю с помощью JS, это понятно, но где он нашел ошибку? Я найти не могу. Может просто глаза замылены уже.
PS: showhide() - функция скрытия объекта, если он виден, и показа, если скрыт.
obj() - обращение к DOM объекта. Использую яндекс API для реализации, однако туплю жестко не могу понять, что не так... Нужна помощь!

Викториан 15.01.2013 12:35

Неужели никто не сталкивался с подобной проблемой?

ksa 15.01.2013 13:20

Викториан, как вариант, напиши все в одну строку...

<script type="text/javascript">
obj('share_span').innerHTML='<span class="yashare-auto-init" data-yashareL10n="ru" data-yashareType="none" data-yashareQuickServices="vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus"></span>';
</script>

Викториан 15.01.2013 19:36

Я писал в одну, но та же самая фигня, ошибка. Писал просто '<span></span>'; и все равно выдавало, что тег не открыт... Не понимаю что не так.

Deff 15.01.2013 19:54

<span class="knopka">
  <span onClick="showhide('share_span');" style="cursor: pointer;">Поделиться</span>
  <span id="share_span" style="display: none;"></span>
 </span>
<script type="text/javascript">
obj("share_span").innerHTML="<span class=\"yashare-auto-init\" data-yashareL10n=\"ru\" data-yashareType=\"none\"\
data-yashareQuickServices=\"vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus\"></span>";
</script>

dmitriymar 15.01.2013 19:56

А кто сказал, что валидаторы всегда правильно отслеживают ошибку и место ошибки?

Викториан 15.01.2013 20:26

Цитата:

Сообщение от dmitriymar (Сообщение 227431)
А кто сказал, что валидаторы всегда правильно отслеживают ошибку и место ошибки?

Я не спорю, но проверять не будут при помощи программиста, а при помощи валидатора. Человвек, которому я делаю плагин не возьмет, если валидатор будет ругаться. А если валидатор пишет, что ошибка, человеку, далекому от программирования все равно не получится объяснить, что по логике все правильно.

Викториан 15.01.2013 20:29

Цитата:

Сообщение от Deff (Сообщение 227430)
<span class="knopka">
  <span onClick="showhide('share_span');" style="cursor: pointer;">Поделиться</span>
  <span id="share_span" style="display: none;"></span>
 </span>
<script type="text/javascript">
obj("share_span").innerHTML="<span class=\"yashare-auto-init\" data-yashareL10n=\"ru\" data-yashareType=\"none\"\
data-yashareQuickServices=\"vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus\"></span>";
</script>

Line 101, Column 96: end tag for element "SPAN" which is not open 
…Services=\"vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus\"></span>";

✉ 

 The Validator found an end tag for the above element, but that element is not currently open. This is often caused by a leftover end tag from an element that was removed during editing, or by an implicitly closed element (if you have an error related to an element being used where it is not allowed, this is almost certainly the case). In the latter case this error will disappear as soon as you fix the original problem. 

 If this error occurred in a script section of your document, you should probably read this FAQ entry.

Deff 15.01.2013 20:32

<span class="knopka">
  <span onClick="showhide('share_span');" style="cursor: pointer;">Поделиться</span>
  <span id="share_span" style="display: none;"></span>
 </span>
<script type="text/javascript">
var a="&lt;span class=\"yashare-auto-init\" data-yashareL10n=\"ru\" data-yashareType=\"none\" data-yashareQuickServices=\"vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus\"&gt;&lt;/span&gt;";
obj("share_span").innerHTML=a.toString();
</script>

Викториан 15.01.2013 20:44

При таком варианте ошибки нет, но вместо кнопок выводится простой текст. Так как угловые скобки теперь стали лишь мнемониками (наверное). Я уже множество вариантов перепробовал, и через PHP, и через JS, если использовать не JS, то выдает три ошибки, так как элементы содержат недопустимые атрибуты. Муть какая-то получается. Сейчас пытаюсь написать свой компонент для "социальных кнопок".


Часовой пояс GMT +3, время: 21:52.