У меня есть следующая часть HTML, который создает новое окно при нажатии:
<a href="/path/to/site" target="_blank">glide by the people</a>
Проблема состоит в том, что это не передает блок проверки допустимости W3C. Как я создаю ссылку как вышеупомянутое, которое действительно проверяет?
Я думаю, вы задаете неправильный вопрос. Атрибут target недействителен в строгом XHTML 1.0, независимо от того, вставляете ли вы его с помощью JavaScript или просто указываете в ответе сервера.
Если вам действительно нужен этот атрибут, вы должны использовать другой тип документа, но это тоже не совсем правильный ответ.
Вы должны спросить себя, зачем вам этот атрибут. Я предполагаю, что вы пытаетесь создать новую вкладку или окно. Излишне говорить, что это обычно считается плохим дизайном (он забирает контроль у пользователя), но если вы действительно хотите это сделать, вы можете сделать это с помощью JavaScript.
Вот как:
Сохраните ссылки, но добавьте специальный класс, например "всплывающее окно" к ним. Затем добавьте строку JavaScript (желательно с использованием инфраструктуры, такой как jQuery или Prototype, чтобы упростить задачу), которая принимает все ссылки с этим классом и предоставляет им обработчик по щелчку, который приводит к созданию новой вкладки / окна и отменяет значение по умолчанию. действие (т.е. прекращает работу ссылки как ссылки). Однако это по-прежнему будет раздражать людей, поскольку отменяет ожидаемое поведение.
Чего вам не следует делать, так это заменять ссылки фиктивными ссылками и полагаться на JavaScript для работы ссылок.
Не обращайте на это внимания. Атрибут target
больше не является устаревшим в HTML (уровень жизни или «5», в зависимости от того, следите ли вы за WHAT WG или W3C). Правильный ответ сегодня - просто заменить ваш DOCTYPE следующим:
<!doctype html>
Обратите внимание, что он больше не должен быть в верхнем регистре или фактически выглядеть как полное объявление SGML DOCTYPE. Это всего лишь рудиментарный артефакт, идентифицирующий документ как соответствующий стандартам HTML.
Если это всего лишь одна или две ссылки, вы можете сделать это встроенным с помощью
<a href="http://stackoverflow.com" onclick="window.open(this.href); return false;"></a>
Более того, и вам, вероятно, понадобится одно из указанных выше js-решений.
Предполагая строгий XHTML, вы должны привязать событие onclick к рассматриваемой привязке. Что-то вроде:
<a href="/path/to/my/link" onclick="window.open('/path/to/my/link');return false;">My link</a>
Кто-то также может возразить, что вы должны связывать это действие onclick отдельно с внешним JavaScript из-за прогрессивного улучшения и отделения поведения от вашей разметки, но это основной способ сделать это.
Используйте этот doctype:
<!DOCTYPE html PUBLIC "-//w3c//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhmtl1/DTD/xhmtl1-transitional.dtd">
1.0 transitional вмещает некоторый "устаревший" код html, включая target = "_ blank".
rel = "new-window"
к ссылке (вместо target = "_ blank"
) добавьте скрипт jquery в начало страницы и добавьте следующий фрагмент
(Обратите внимание, что, когда я вводил это в текстовое поле stackoverflow, я не тестировал его.)
Проверка - это еще не все, что нужно для качества кодирования.
Некоторые вещи являются «стандартными» в браузерах, но не являются стандартом w3c.
Использование JS немного излишне, когда функция уже существует.
Вы не можете сделать это со строгой проверкой W3C.
Решения:
Переходный тип документа, как уже упоминалось
Другой валидатор (например, CSE )
Используйте JavaScript для замены "_blank" - см. http: // www.ajaxblender.com/open-links-new-window-w3c-valid-target-blank.html (ссылка показывает, как это аккуратно сделать с помощью jQuery - я вставляю два примера ниже).
$(document).ready(function(){ $('A[rel="_blank"]').each(function() { $(this).attr('target', '_blank'); }); }); // ...OR... $(document).ready(function(){ $('A[rel="_blank"]').click(function() { window.open($(this).attr('href')); return false; }); });