Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Отменить действие по умолчанию (https://javascript.ru/forum/jquery/45093-otmenit-dejjstvie-po-umolchaniyu.html)

Lion_astana 14.02.2014 00:51

Отменить действие по умолчанию
 
Привет всем.

Есть функция которая срабатывает при клике на кнопку отправки формы. При нажатии на кнопку происходит ряд проверок заполнения полей (т.н. валидация).

После всех проверок дополнительно AJAX-ом (при помощи jQuery) идет запрос к скрипту PHP, который либо присылает ответ в виде элемента, например "p" с классом "error" и текстом внутри, если ошибка, либо вообще ничего не пишет. Данные ловлю как html.

В success функции $.ajax ловлю ответ и вставляю в элемент, например div с классом "MyDiv". И делаю проверку:

if($("#MyDiv").has(".error").length > 0){ // Если в ответе пришел p  с классом error
// Вот тут что написать чтобы отменить click по батону формы?
};


Код примера:
$("#newSubmit").click(function(){// Обработка формы
//идут проверки
//если прошли, то ...
		
		$.ajax({
			type: "POST",
			url: '....php',
			data: {...: ...},
			cache: false,
			dataType: "html",
			success: function(data){
			$("#MyDiv").html(data);				
                                  if($("#MyDiv").has(".error").length > 0){ // Если в ответе пришел p  с классом error
                                  // Вот тут что написать чтобы отменить click по батону формы?
};
			}
		});			
	});


Заранее благодарю за советы.

danik.js 14.02.2014 01:38

Lion_astana, типичная ошибка.
Клик нужно отменять пока выполняется функция-обработчик click'а. А когда пришел ответ от сервера - то уже поздно что-то отменять, ибо обработчик то давно уже отработал, и браузер начал выполнять свое действие по умолчанию.
Поэтому логика такая: сразу отменяем действие по умолчанию (возвратив false или вызвав event.preventDefault() - event приходит аргументом ), а по окончанию запроса уже если нужно сабмитим form.submit()

Lion_astana 14.02.2014 10:27

danik.js,
спасибо!


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