Ошибка в коде js при котором некорректно работает alert

186
21 февраля 2018, 12:26

Почему в видеоуроке от mail.ru написано $('a').click(function() {alert('lalala'); return false;}); и при нажатии на ссылку выскакивает alert и после нажатия на ок не пропускает дальше пользователя, при повторном нажатии на ссылку выскакивает alert

А в моем коде <div class="header__list_raw" onclick="userIsntLogged ();"></div>

js

function  userIsntLogged () {
    alert('Для начала войдите на сайт');
    return false;
    }

При нажатии на ссылку открывает alert после нажатия на ок переходит на ссылку, при повторном нажатии на ссылку alert не выскакивает, пока не обновишь страницу

Answer 1

Проблема в том, что вы по разному устанавливаете обработчик события.

$('a').click(function() {alert('lalala'); return false;});
<div class="header__list_raw" onclick="userIsntLogged ();"></div>

В первом случае вешается обработчик события на клик по ссылке и внутри возвращается false дабы остановить всплытие и поведение по умолчанию. У вас же при клике выполняется функция, которая тоже возвращает false, но есть одно НО

Ваш код js выполняет примерно вот так

<div onclick="function(event) { userIsntLogged (); }">
</div>

То есть на самом деле js оборачивает ваш код в функцию. Что бы работало, нужно что бы именно эта "нативная" ф-ция возвращала false

<div onclick="userIsntLogged (); return false">
</div>
// либо
<div onclick="return userIsntLogged ();">
</div>

P.S.
Возвращать false уже не модно, это слишком неявный способ, потому что кроме отмены действия по умолчанию он еще и останавливает всплытие. Используйте лучше stopPropogation, preventDefault

<div onclick="userIsntLogged (event);">
</div>
function  userIsntLogged (e) {
    e.stopPropagation(); // отменяем всплытие
    e.preventDefault(); // отменяем действие по умолчанию
    alert('Для начала войдите на сайт');
}
READ ALSO
Вывести элементы массива каждый в новой строке

Вывести элементы массива каждый в новой строке

Вечер добрый! Есть массив arr=[{id:1, title:

238
Как удалить объекты в объекте?

Как удалить объекты в объекте?

Есть некий объект, внутри которого другие объекты доступны по ключам:

213
Как content script общается с background? (В google расширении)

Как content script общается с background? (В google расширении)

Не получается подключить content script с backgroundНе реагирует

238