Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Почему preventDefault(); аналог (return false;) срабатывает один раз?

Почему preventDefault(); аналог (return false;) срабатывает один раз?


     02.09.2020    return false, preventDefault, валидность    Общие вопросы, jQuery    1944

вопрос
Всем привет. Я собрал небольшой скрипт который проверяет поля на валидность при добавлении новости на сайт.

Кнопки формы:



Скрипт:



Проблема с кнопкой - Просмотр, event.preventDefault(); блокирует onclick только один раз, все остальные разы DLEalert выскакивает, но так же выскакивает и окно предосмотра, то есть onclick отрабатывает. В чем ошибка, как подправить. Всем заранее спасибо.

Ответа пока нет


28 комментариев

LazyDev
PHP-developer

LazyDev - 2 сентября 2020 15:01 -

event.preventDefault не тоже самое что и return false
$(document).ready(function(){	
	$('button[name="add"], button[name="nview"]').click(function preview(event) {
		event.preventDefault();
		
		f_short_story = $('#short_story').val();
		
		if (f_short_story == '' || f_short_story == undefined) {
			DLEalert('Не заполнено поле "Краткое описание блюда (анонс)"', dle_info);
			return false;
		}

		xf_ingredient_1 = $('#xf_ingredient-1').val();
		xf_kolichestvo_1 = $('#xf_kolichestvo-ingredientov-1').val();
		
		if (xf_ingredient_1 == '' || xf_kolichestvo_1 == '') {
			DLEalert('Не заполнено поле "Ингредиент" или "Количество ингредиентов"', dle_info);
			return false;
		}
		
		xf_vremja_prigotovlenija = $('#xf_vremja-prigotovlenija').val();
		
		if (xf_vremja_prigotovlenija != +xf_vremja_prigotovlenija ) {
			DLEalert('Время нужно указать в минутах и только цифры', dle_info);
			return false;
		}
	});
});

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

ushkom
Юзер

ushkom - 2 сентября 2020 15:39 -

К сожалению все тоже самое, ни первый вариант ни второй не работает, все как и было

joydo
Юзер

joydo - 2 сентября 2020 15:03 -


				return false;
				event.preventDefault();


После return уже ничего не выполняется, т.е. вы вышли из функции

Т.е. нужно сделать

				event.preventDefault();
				return false;

ushkom
Юзер

ushkom - 2 сентября 2020 15:42 -

Тоже самое

lutskboy
Эксперт

lutskboy - 2 сентября 2020 16:34 -

LazyDev вам выше написал где должен быть event.preventDefault();

ushkom
Юзер

ushkom - 2 сентября 2020 16:37 -

Я сделал как написали, но проблема осталась. Срабатывает только первый раз, дальше не хочет.

Исправленный скрипт.


lutskboy
Эксперт

lutskboy - 2 сентября 2020 16:39 -

какой же он исправленный если после
$('button[name="add"], button[name="nview"]').click(function preview(event) {
должно быть

ushkom
Юзер

ushkom - 2 сентября 2020 16:43 -

Я же написал пробовал оба варианта, вы говорите об этом:



Он тоже не работает.

ushkom
Юзер

ushkom - 2 сентября 2020 16:38 -

И делал как советовал LazyDev, тоже самое.

lutskboy
Эксперт

lutskboy - 2 сентября 2020 16:47 -

так на кнопку просмотр повесили onclick="preview(event)". вот ета функция и срабатывает
а event.preventDefault() отменяет стандартное событие.

ushkom
Юзер

ushkom - 2 сентября 2020 16:50 -

Я не силен в js мне нужно чтоб выскакивала подсказка DLEalert а кнопка блокировалась. вычитал что onclick можно отменить preventDefault();

ushkom
Юзер

ushkom - 2 сентября 2020 16:54 -

Делал на примере этого ответа https://learn.javascript.ru/task/why-return-false-fails

lutskboy
Эксперт

lutskboy - 2 сентября 2020 16:58 -

попробуйте добавить еще event.stopPropagation();

ushkom
Юзер

ushkom - 2 сентября 2020 17:03 -

Тоже нет, я читал про нее тоже

ushkom
Юзер

ushkom - 2 сентября 2020 17:00 -

Вот в том и проблема что event.preventDefault() срабатывает только один раз. Допустим поле заполнили не верно, onclick="preview(event)" не запустилась а DLEalert запустился, так и должно быть. Но когда второе поле заполнил не верно запускается и DLEalert и onclick="preview(event)", вот эту проблему не могу решить.

lutskboy
Эксперт

lutskboy - 2 сентября 2020 17:14 -

document.entryform.nview.onclick = function () {
	return false
}

ushkom
Юзер

ushkom - 2 сентября 2020 17:19 -

Это после каждого сравнения нужно прописать?

Так:


lutskboy
Эксперт

lutskboy - 2 сентября 2020 17:21 -

нет. ето отдельно надо прописать

ushkom
Юзер

ushkom - 2 сентября 2020 17:25 -

Большое спасибо, работает. Не могу понять чего не работал до этого return false

ushkom
Юзер

ushkom - 2 сентября 2020 17:39 -

Да только теперь кнопка предосмотр не работает даже тогда когда все поля верно заполнены. Подставлял и так:



И в сам if

Не могу понять как она может блокировать в самом if

lutskboy
Эксперт

lutskboy - 2 сентября 2020 17:42 -

а она и не будет работать. ее теперь вызвать надо preview()

ushkom
Юзер

ushkom - 2 сентября 2020 17:55 -

Ничего не понял.

Кнопку сделал так:



Скрипт собрал так:



После верных заполнений кнопка отключена, где я ошибся? И как может блокироваться кнопка если все внутри if лежит? Тяжело мне js дается

lutskboy
Эксперт

lutskboy - 2 сентября 2020 18:03 -

document.entryform.nview.onclick = function () {
					return false
				}
вообще за пределы всего надо вывести
например перед
$(document).ready(function(){

а функцию preview() уже в конце етого кода
$('button[name="add"], button[name="nview"]').click(function() {
.....
if($(this).attr('name')=='nview') preview();
});

ushkom
Юзер

ushkom - 2 сентября 2020 18:10 -

Консоль ругается на это
if($(this).attr('name')==''nview) preview();


На это: ''nview

Все что собрал:


ushkom
Юзер

ushkom - 2 сентября 2020 18:38 -

Спасибо Вам большое за помощь

ushkom
Юзер

ushkom - 2 сентября 2020 21:02 -

Напишите свой киви кошелек, я постараюсь завтра хоть на пиво Вам сбросить. Спасибо за помощь.

ushkom
Юзер

ushkom - 2 сентября 2020 18:16 -

Все понял, опечатка была
if($(this).attr('name')=='nview') preview();

ushkom
Юзер

ushkom - 2 сентября 2020 18:25 -

Все работает, единственное что после добавления новости выскакивает ошибка в консоли:

А сам функционал кажется работает хорошо

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх