Ошибка свойства '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>
|
скорей всего объекта нет. выведите в консоль этот объект, скорей всего выведится undefined
|
еще вот
Uncaught TypeError: Cannot read property 'length' of undefined js.js:41 (anonymous function) только не пойму почему и что исправить? |
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, то объект не нашелся |
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 |
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 ответа высветила консоль? |
<img src="images/send_btn.png" style=" margin:10px 0 0 0; cursor:pointer;" 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 |
ну вот. не нашел form
var parent = $(this).parent('form'); попробуйте прописать так: var parent = $(this).parent(); |
все работает спасибо
|
| Часовой пояс GMT +3, время: 22:13. |