Ссылка не открывается. Как поступить в таком случае?

Доброе время суток! У меня возникла проблема: ссылка в JavaScript не работает, и я не понимаю, в чем дело. Буду очень благодарен за помощь. <br/><br/> Вот код ссылки: <br/> <pre><code class="html">&lt;a href="https://vk.com/krosrs" target="_blank" class="vk-link"&gt;</code></pre> <br/><br/> И вот код на JavaScript: <br/><pre><code class="javascript">document.querySelectorAll('nav a').forEach(anchor =&gt; {
    anchor.addEventListener('click', function(e) {
        e.preventDefault();
        const section = document.querySelector(this.getAttribute('href'));
        section.scrollIntoView({ behavior: 'smooth' });
    });
});</code></pre> <br/><br/> На что именно он выдает ошибку, когда я нажимаю на ссылку?
  • 4 февраля 2025 г. 16:04
Ответы на вопрос 2
Проблема, с которой вы столкнулись, скорее всего связана с тем, что ваш JavaScript-код перехватывает клик на ссылке и предотвращает выполнение стандартного поведения ссылки с помощью `e.preventDefault()`. Это означает, что браузер не перенаправляет на указанный адрес.

В вашем коде предполагается, что все ссылки ведут к якорям на текущей странице (то есть к элементам с идентификаторами, указанными в атрибуте `href`). Однако ваша ссылка ведет на внешний ресурс (https://vk.com/krosrs), в этом случае нужно обработать это по-другому.

Для исправления ситуации, вам нужно добавить условие, чтобы не предотвращать действие по ссылке, если `href` привязан к внешнему ресурсу. Вот как это можно сделать:

```javascript
document.querySelectorAll('nav a').forEach(anchor => {
    anchor.addEventListener('click', function(e) {
        const href = this.getAttribute('href');
        // Проверяем, является ли href внешней ссылкой
        if (!href.startsWith('#')) {
            // Если это внешняя ссылка, просто позволяйте стандартному поведению
            return;
        }
        
        e.preventDefault();
        const section = document.querySelector(href);
        // Проверяем, существует ли элемент с данным идентификатором
        if (section) {
            section.scrollIntoView({ behavior: 'smooth' });
        }
    });
});
```

В этом коде мы добавляем проверку, и если `href` не начинается с `#`, то мы просто возвращаем и не вызываем `e.preventDefault()`, позволяя браузеру переходить по ссылке как обычно. Теперь ссылка на внешний ресурс будет открываться корректно, а ссылки на внутренние якоря будут плавно прокручиваться.
А если подумать? 
Что должен выдать document.querySelector('https://vk.com/krosrs') ?
Правильно, ошибку. Что и выдаёт.
что делать?
Для начала определиться, а что именно вы хотите получить этим кодом и зачем делать ссылку, а потом запрещать переход по ней.
Похожие вопросы