Ошибка свойства '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> |
Функция parent ищет прямого родителя, а прямой родитель у вас div, но никак не form
Можно воспользоваться функциями parents или closest Это если вам нужен доступ непосредственно к форме |
Часовой пояс GMT +3, время: 20:11. |