Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.07.2013, 10:08
Аспирант
Отправить личное сообщение для 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:15.
Ответить с цитированием
  #2 (permalink)  
Старый 18.07.2013, 10:13
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

скорей всего объекта нет. выведите в консоль этот объект, скорей всего выведится undefined
Ответить с цитированием
  #3 (permalink)  
Старый 18.07.2013, 10:22
Аспирант
Отправить личное сообщение для iskander83 Посмотреть профиль Найти все сообщения от iskander83
 
Регистрация: 04.05.2013
Сообщений: 73

еще вот
Uncaught TypeError: Cannot read property 'length' of undefined js.js:41
(anonymous function)
только не пойму почему и что исправить?
Ответить с цитированием
  #4 (permalink)  
Старый 18.07.2013, 12:17
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

if (phone.length == 0)
здесь ошибка?

пропишите так:
....
var errors = false;
_name = $(parent).find('#name');
_phone = $(parent).find('#phone');
_form = $(parent).find('#hidestring');
_email = $(parent).find('#email');
_ahref = $(parent).find('#ahref');
console.log($(_phone)[0]);
...


и посмотрите, что упало в консоль. если undefined, то объект не нашелся
Ответить с цитированием
  #5 (permalink)  
Старый 18.07.2013, 12:53
Аспирант
Отправить личное сообщение для iskander83 Посмотреть профиль Найти все сообщения от iskander83
 
Регистрация: 04.05.2013
Сообщений: 73

skrudjmakdak,
ну да индефинит только я не пойму почему и что делать дальше?
Uncaught TypeError: Cannot read property 'length' of undefined js.js:46
undefined js.js:36
Uncaught TypeError: Cannot read property 'length' of undefined js.js:46
(anonymous function) js.js:46
p.event.dispatch jquery.min.js:2
g.handle.h
Ответить с цитированием
  #6 (permalink)  
Старый 18.07.2013, 13:04
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

iskander83, только без паники)) найдем что делать дальше..

вот сейчас объясню почему так. у вас есть эта строчка:
_phone = $(parent).find('#phone');
и то что вы хотите найти, jquery не находит. причины могут быть разные.

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

сделайте это:
$('form .send_audit').click(function() {
        console.log($(this)[0]);
        var parent = $(this).parent('form');
        console.log($(parent)[0]);
        var errors = false;
        _name = $(parent).find('#name');
        _phone = $(parent).find('#phone');
        console.log($(_phone)[0]);
        _form = $(parent).find('#hidestring')
        _email = $(parent).find('#email')
        _ahref = $(parent).find('#ahref')


посмотрите в консоль и какие 3 ответа высветила консоль?
Ответить с цитированием
  #7 (permalink)  
Старый 18.07.2013, 13:15
Аспирант
Отправить личное сообщение для iskander83 Посмотреть профиль Найти все сообщения от iskander83
 
Регистрация: 04.05.2013
Сообщений: 73

<img src="images/send_btn.png" style=" margin:10px 0 0 0; cursorointer;" alt="Отправить" title="Отправить" class="send_audit" /> js.js:28
undefined js.js:30
undefined js.js:34
Uncaught TypeError: Cannot read property 'length' of undefined js.js:48
(anonymous function) js.js:48
p.event.dispatch jquery.min.js:2
p.event.add.g.handle.h
Ответить с цитированием
  #8 (permalink)  
Старый 18.07.2013, 13:37
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

ну вот. не нашел form

var parent = $(this).parent('form');
попробуйте прописать так:
var parent = $(this).parent();
Ответить с цитированием
  #9 (permalink)  
Старый 18.07.2013, 14:11
Аспирант
Отправить личное сообщение для iskander83 Посмотреть профиль Найти все сообщения от iskander83
 
Регистрация: 04.05.2013
Сообщений: 73

все работает спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение css свойства Rumis jQuery 2 21.05.2013 11:55
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