Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.07.2013, 10:10
Аспирант
Отправить личное сообщение для iskander83 Посмотреть профиль Найти все сообщения от iskander83
 
Регистрация: 04.05.2013
Сообщений: 73

Ошибка свойства 'length'
Всем привет. Есть такой скрипт отвечающий за работу форм на сайте..

jQuery.fn.center = function () {
    this.css("position","absolute");
    this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight()) / 2) + 
                                                $(window).scrollTop()) + "px");
    this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 4) + 
                                                $(window).scrollLeft()) + "px");
    return this;
}
var close_dialog = function() {
	$('#thanks').hide();
	$('#overlay').remove();
    $('#overlay').hide();
	$('#name').val('');
	$('#phone').val('');
	$('.form_backcall').hide();
	$('.form_akcia').hide();
	
}



$(document).ready(function() {

//---------------------------------------------------		
				
	$('form .send_audit').click(function() {
		var parent = $(this).parent('form');
		var errors = false;
		_name = $(parent).find('#name');
		_phone = $(parent).find('#phone');
		_form = $(parent).find('#hidestring')
		_email = $(parent).find('#email')
		_ahref = $(parent).find('#ahref')
		
		name = $(_name).val();
		phone = $(_phone).val();
		email = $(_email).val();
		ahref = $(_ahref).val();	
		form = $(_form).text();
	
			if (phone.length == 0)
		{
		alert('Заполните, пожалуйста поля');
			errors = true;
		}
		else if (name.length == 0)
		{
			alert('Заполните, пожалуйста пол');
			errors = true;
		}
		else if (ahref.length == 0)
		{
			alert('Заполните, пожалуйста поле "Ссылка на сайт"');
			errors = true;
		}
		else if (phone.length < 7)
		{
		errors = true;
		alert('Проверьте, пожалуйста, корректность заполнения формы. Введите Ваш номер телефона в виде +7-888-777-55-33');	
		}
		
		
		else if (phone.length > 16)
		{
		errors = true;
		alert('Проверьте, пожалуйста, корректность заполнения формы. Введите Ваш номер телефона в виде +7-888-777-55-33');	
		}
		
		digits="0123456789+-() "
		for(i=0; i<1; i++)
if (digits.indexOf(phone.charAt(i))<0)
{alert("Это должны быть цифры")
document.dataentry.phone.focus()
break
}

		if (!errors)
		{
			$(_name).val('');
			$(_phone).val('');
			$(_email).val('');
			$(_ahref).val('');

			
				
			$.post("sendmessage_audit.php",
			{ ajax: 'yes', form: form, name: name, phone: phone, email: email, ahref: ahref },//, content: content, model: model },
			function(returned) {
				if (returned == 'true') {
					
					$('#thanks').center();
					$('#thanks').show();
					
					$('.close_btn').bind('click', function() { close_dialog(); });
					$('#overlay').bind('click', function() { close_dialog(); });
				} else {
					alert('An error has occured');
				}
			});
		}
	});


//-------------------------------------------		

	
	$('.buttn').bind('click', function() { show_order_form(''); });
	$('.buttn_a').bind('click', function() { show_akcia_form(''); });
	$('.close').bind('click', function() { close_dialog(''); });
	$('#overlay').bind('click', function() { close_dialog(); });
	
	$('.close2').bind('click', function() { close_dialog2(''); });


		
		//---------------------------------------------------		
				
	$('form .send').click(function() {
		var parent = $(this).parent('form');
		var errors = false;
		_name = $(parent).find('#name');
		_phone = $(parent).find('#phone');
		_form = $(parent).find('#hidestring')
		
		name = $(_name).val();
		phone = $(_phone).val();
		form = $(_form).text();
	
			if (phone.length == 0)
		{
			alert('Заполните, пожалуйста поля');
			errors = true;
		}
		else if (phone.length < 7)
		{
		errors = true;
		alert('Проверьте, пожалуйста, корректность заполнения формы. Введите Ваш номер телефона в виде +7-888-777-55-33');	
		}
		
		
		else if (phone.length > 16)
		{
		errors = true;
		alert('Проверьте, пожалуйста, корректность заполнения формы. Введите Ваш номер телефона в виде +7-888-777-55-33');	
		}
		
		digits="0123456789+-() "
		for(i=0; i<1; i++)
if (digits.indexOf(phone.charAt(i))<0)
{alert("Это должны быть цифры")
document.dataentry.phone.focus()
break
}

		if (!errors)
		{
			$(_name).val('');
			$(_phone).val('');

			
			$('#forma').hide();
			
			$.post("sendmessage.php",
			{ ajax: 'yes', form: form, name: name, phone: phone },//, content: content, model: model },
			function(returned) {
				if (returned == 'true') {
					
					$('#thanks').center();
					$('#thanks').show();
					
					$('.close_btn').bind('click', function() { close_dialog(); });
					$('#overlay').bind('click', function() { close_dialog(); });
				} else {
					alert('An error has occured');
				}
			});
		}
	});
});


var show_order_form = function(text){
	var overlay = $('<div>').attr('id', 'overlay');
	overlay.appendTo(document.body);
	$('.form_backcall').center();
	$('.form_backcall').show();
	
	$('.close_btn').bind('click', function() { close_dialog(); });
	$('#overlay').bind('click', function() { close_dialog(); });
}


var show_akcia_form = function(text){
	var overlay = $('<div>').attr('id', 'overlay');
	overlay.appendTo(document.body);
	$('.form_akcia').center();
	$('.form_akcia').show();
	
	$('.close_btn').bind('click', function() { close_dialog(); });
	$('#overlay').bind('click', function() { close_dialog(); });
}

var show_thanks = function(text){
	var overlay = $('<div>').attr('id', 'overlay');
	overlay.appendTo(document.body);
	$('#thanks').center();
	$('#thanks').show();
	
	$('.close_btn').bind('click', function() { close_dialog(); });
	$('#overlay').bind('click', function() { close_dialog(); });
}


так вот все формы работают коректно кроме одной $('.send_audit').click(function() ....
когда кликаю на кнопку отправки должен по идеи выдавать ошибку (что и происходит в других формах, за которые отвечает нижняя функция $('form .send').click(function() ...), но ничего не происходит, а отладчик рисует ошибку:
Uncaught TypeError: Cannot read property 'length' of undefined [VM] js.js (943):41
я не пойму в чем дело, хотя сотни раз использовал этот скрипт - все было нормально. Подскажите в чем причина...

вот код проблемной формы
<form>	
 <p>ЗАПИШИТЕСЬ НА БЕСПЛАТНЫЙ АУДИТ!	</p>
<div id="hidestring">"БЕСПЛАТНЫЙ АУДИТ!"</div>		

<div style=" margin:auto; width:220px">
 				<input type="text" name="name" id="name" placeholder="Имя * "  />
 

				<input type="text" name="email" id="email" placeholder="E-mail "/>  
                
                	<input type="text" name="phone" id="phone" placeholder="Телефон * " />
 

				<input type="text" name="ahref" id="ahref" placeholder="Ссылка на сайт * "/>   


 <img src="images/send_btn.png" style=" margin:10px 0 0 0; cursor:pointer;" alt="Отправить" title="Отправить" class="send_audit" />
 </div>
</form>

Последний раз редактировалось iskander83, 18.07.2013 в 10:14.
Ответить с цитированием
  #2 (permalink)  
Старый 18.07.2013, 23:39
Новичок на форуме
Отправить личное сообщение для werg Посмотреть профиль Найти все сообщения от werg
 
Регистрация: 18.07.2013
Сообщений: 1

Функция parent ищет прямого родителя, а прямой родитель у вас div, но никак не form
Можно воспользоваться функциями parents или closest
Это если вам нужен доступ непосредственно к форме

Последний раз редактировалось werg, 18.07.2013 в 23:42.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка свойства 'length' iskander83 Общие вопросы Javascript 8 18.07.2013 14:11
firebug пишет ошибка invalid range in character class Dim@ Общие вопросы Javascript 5 10.05.2012 16:52
Поведение свойства length в разных браузерах. mihim Общие вопросы Javascript 1 13.08.2011 10:50
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07