Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отправка одного поля без перезагрузки страницы (https://javascript.ru/forum/events/43906-otpravka-odnogo-polya-bez-perezagruzki-stranicy.html)

Batyabest 26.12.2013 00:51

Отправка одного поля без перезагрузки страницы
 
Доброй ночи.
Пытаюсь сделать отправку одного поля без перезагрузки страницы. Сталкиваюсь с проблемой - отдельно работает, а прикручиваю на сайт - перестает. Может быть конфликт с joomla?

Вот код:
<form id="form" method="post" action="javascript:void(0);" onsubmit="ajax()">
	<p>Ваш номер телефона</p>
	<p><input type="text" name="email" class="email" value="" /></p>
	<p><input type="submit" name="send" class="send" value="send"></p>
</form>
<div id="results"></div>


function ajax() { //Ajax отправка формы
	var msg = $("#form").serialize();
	$.ajax({
		type: "POST",
		url: "/form/send.php",
		data: msg,
		success: function(data) {
			$("#results").html(data);
		},
		error:  function(xhr, str){
			alert("Возникла ошибка!");
		}
	});
}

jQuery.fn.notExists = function() { //Проверка на существование элемента
	return $(this).length==0;
}

$(document).ready(function(){ //Валидация формы
	$(".send").validation(
		$(".email").validate({
			test: "blank digits",
			invalid: function(){
				if($(this).nextAll(".error").notExists()) {
					$(this).after('<div class="error">Введите корректный номер телефона</div>');
					$(this).nextAll(".error").delay(2000).fadeOut("slow");
					setTimeout(function () {
						$(".email").next(".error").remove();
					}, 2600);
				}
			},
			valid: function(){
				$(this).nextAll(".error").remove();
			}
		})
		
	);
});


if (!isset($_POST['email']) or empty($_POST['email'])) {
	$error2 = "Email?<br />";
} else $error2 = NULL;

if (empty($error1) and empty($error2) and empty($error3) and empty($error4)) {
	$subject = $_POST['subject'];
	$name    = $_POST['name'];
	$email   = $_POST['email'];
	$message = "Телефон: {$email}";
	if (mail("test@test.ru", $subject, $message)) {
		echo "Отправлено!";
	} else echo "Ошибка!";
} else {
	echo $error1.$error2.$error3.$error4;
}

danik.js 26.12.2013 05:28

Цитата:

Сообщение от Batyabest
Может быть конфликт с joomla?

Ага, некоторые движки прям не переносят javascript код )))) Аллергия наверное.

А по делу - в joomla используется js-фреймворк mootools, который также использует знак доллара в качестве имени своей функции, вот и конфликт.

Лучшее решение - отключить мутулз в джумле, да и вобще переписать скрипт на чистом js с использованием HTML5 валидации + webshims. Но это не для тебя дружок, не потянешь наверное. Твой удел - jQuery.noConflict()
Цитата:

Сообщение от Batyabest
<p>Ваш номер телефона</p>
    <p><input type="text" name="email" class="email" value="" /></p>

Логика? Не, не слышал...

danik.js 26.12.2013 05:29

И да, проще будет найти какой-нибудь модуль уже готовый, ведь для джумлы тысячи их.

Vlasenko Fedor 26.12.2013 05:41

Плагин отключает Mootools https://github.com/Poznakomlus/joomla_options
и можно ведь
jQuery(document).ready(function(f){ 
//здесь весь ваш код где вместо $ вы и спользуете f или любую понравившуюся

})();

danik.js 26.12.2013 06:43

Poznakomlus, а почему f, а не $? Трудно представить что кому-то в голову вбредет использовать и mootools и jquery в одном плагине :)

Batyabest 26.12.2013 12:25

Poznakomlus,
Спасибо, буду пробовать.

Vlasenko Fedor 26.12.2013 12:30

Цитата:

Сообщение от danik.js (Сообщение 289323)
Poznakomlus, а почему f, а не $? Трудно представить что кому-то в голову вбредет использовать и mootools и jquery в одном плагине :)

f первая буква имени своего, точно не забудешь, да и ответил ты уже сам на свой вопрос


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