|
|
|
| Здравствуйте и с Наступающим вас!
Написал простенькую фанкшин проверки e-mail:
$('.reg_form input[name="mail"]').focusout(function() {
var regex = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
//if(regex.test($(this).val())){
var mail = $(this).val();
var dates ={mail:mail, sec:sec};
$.get('../../reg_check.php',dates,success1,'html');
function success1(recievData){
$('#form_notes_4').html(recievData);
}
//}
});
Без if все работает, регулярка правильная, но с if - не работает. Вообще, если даже поставить изначально true-условие, $.get все равно не выполняется.
Почему?
Вот более общий вопрос: http://otvety.google.ru/otvety/thread?tid=1c7f835bd07670c1
Спасибо. | |
|
|
|
|
|
|
|
для: Deed
(08.05.2012 в 15:02)
| | If тут совсем не при чем - регулярное выражение у вас содержит ошибку, собачку экранировать не надо. Поместите это в одном файле и выполните - проблем с условием нет. Да и быть не может.
<?php
if(isset($_GET['mail'])) {
echo $_GET['mail'];
exit;
}
?>
<form id="reg_form">
<input name="mail" />
</form>
<div id="rq"></div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$('#reg_form input[name="mail"]').focusout(function() {
var regex = /^([\w\d\-]+\.)*[\w\d\-]+@([a-z\d][a-z\d\-]*[a-z\d]\.)+[a-z]{2,4}$/i;
if(regex.test($(this).val())){
$.get('',{mail:$(this).val()},function(d){
$("#rq").text(d);
},'html');
}
});
</script>
|
Если вы обращаетесь к элементу по классу, то указывайте полный селектор, к примеру у вас, это "form .reg_form". Это позволит избежать массу лишних переборов классов в поисках необходимого. Если это не критично, то лучше обращаться к элементу по его id, это менее затратно. | |
|
|
|
|
|
|
|
для: confirm
(09.05.2012 в 00:06)
| | Спасибо большое!
Но...
Вот пример:
var sec = $('.reg_form input[name="sec"]').val();
$('.reg_form input[name="name"]').focusout(function(e) {
var name = $(this).val();
if(name!=''){
var dates ={name:name, sec:sec};
$.get('../../reg_check.php',dates,success1,'html');
function success1(recievData){
$('#form_notes_1').html(recievData);
}
}
else{
$('#form_notes_1').html('Типа, инкогнито, да?');
}
window.n = name;
});
Без if работает все. (Блин! Почему???)
jQuery 1.7.2
Стало быть, есть какое-то... что-то общее, что делает невозможной реализацию $.get(), в случае, если ему предшествует проверка условия??? | |
|
|
|
|
|
|
|
для: Deed
(09.05.2012 в 00:33)
| | Я вот обрамлял свой код ВВ-тегами [сode][/сode] при помещении его сюда, и то только сейчас обратил внимание, что написал ересь:
[\w\d\-]
а достаточно
[\w\-]
|
А вы вставляете код просто как текст, который не имеет отступов, его читать трудно. Мало кто захочет читать таковой, так что не забывайте о [сode][/сode].
Что касается Блин! Почему?, то достаточно закомментировать строку ajax запроса и вместо нее написать alert(1). Будете знать - выполняется ваше условие или нет. Проверить передачу/прием ajax запросов поможет отладчик, например, Firebug в FF, для этого достаточно просмотреть его вкладу Сеть.
Ищите ошибки допущенные вами, а не в самой конструкции IF, как части управляющей структуры языка. | |
|
|
|
|
|
|
|
для: confirm
(09.05.2012 в 06:44)
| | C Праздником Вас и еще раз спасибо!
Алерт выполняется. Firebug - не отображает какого-либо события ajax. Что угодно происходит, но не ajax. Стоит убрать проверку условия - и все работает. Может, обернуть этот блок в $(document).ready()?
Бестолку... | |
|
|
|
|
|
|
|
для: Deed
(09.05.2012 в 09:31)
| | Здасьте, приехали. ) $(document).ready() - это блок описывающий сценарии, которые будут выполняться после загрузки документа. Именно в нем идет присвоение обработчиков событий элементов, и если у вас до этого было не так, то никакой обработки любого события конечно же не будет, включая и потерю фокуса элементом.
Так что не "может обернуть", а вы обязаны были это сделать. Мой пример работает лишь потому, что скрипт идет после описания элементов на странице. | |
|
|
|
|
|
|
|
для: confirm
(09.05.2012 в 10:26)
| | Боюсь Вам надоесть, но ничего не поменялось. Абсолютно.
Может, это существенно, но скрипт подключается под формой регистрации, ниже ее.
P.S. Меня вводит в ступор эта проблема. Любой оператор в условии выполняется, ajax же - нет!
Как такое возможно??.. | |
|
|
|
|
|
|
|
для: Deed
(09.05.2012 в 10:41)
| | Если у вас обрабатывается само событие потери фокуса, то значит обработчик его работает, другими словами с body onload у вас все нормально. Следовательно все должно работать, если выполняются условия.
Что означает "скрипт подключается под формой регистрации, ниже ее" я не знаю, так как важно не только место, но и время и способ подключения. А гадать я не буду.
Выводите на экран (можно тем же alert) все переменные, которые необходимы для данной операции, все ли у вас ОК тут. | |
|
|
|
|
|
|
|
для: confirm
(09.05.2012 в 10:53)
| | Глубокоуважаемый confirm. Все переменные - ОК, когда есть if и когда его экранируешь.
Стоит убрать проверку условия, ajax работает. Стоит ввести проверку (даже if(1>0)) - все, ajax молчит. Firebug показывает полное отсутствие событий. Убираешь проверку - все работает.
Я сейчас создам простенький html и попробую в нем. | |
|
|
|
|
|
|
|
для: Deed
(09.05.2012 в 11:25)
| | Прикрепите результирующий html код этой страницы, немного позже посмотрю его. Чудес не бывает - либо у вас ошибки, либо вы что-то делаете не правильно. | |
|
|
|
|
 1 Кб |
|
|
для: confirm
(09.05.2012 в 11:45)
| | Вот, посмотрите, пожалуйста. Проще не бывает. Без проверки все работает, с проверкой - алерт выскакивает, ajax не работает.
Буду благодарен за ответ. | |
|
|
|
|
|
|
|
для: Deed
(09.05.2012 в 12:40)
| | Загружайте jQuery с адреса как у меня в примере, и проблем не будет.
Пора переходить на utf. | |
|
|
|
|
|
|
|
для: confirm
(09.05.2012 в 13:48)
| | Да ничего не происходит.
Подключил локальный jquery, конвертнул страницу в utf-8. Никаких изменений.
Вам разве самому не интересно, почему так? | |
|
|
|
|
|
|
|
для: Deed
(09.05.2012 в 15:03)
| | UTF не для того, чтобы запрос заработал, а чтобы проблем меньше было.
Ваш код, с подключенным jquery по указанному мною адресу работает.
Что у вас там еще, я не знаю. | |
|
|
|
|
|
|
|
для: confirm
(09.05.2012 в 15:18)
| | Ага! Я не удосужился проверить работоспособность скрипта в других браузерах. Во всех все работает нормально, кроме FF. Может, какой-то аддон выкаблучивается?
Проверю с отключенными плагинами. Та же картина...
FF 12.0 | |
|
|
|
|
|
|
|
для: Deed
(09.05.2012 в 19:11)
| | Я же вроде бы вам сказал уже - подключайте с другого адреса, и будет работать и FF. | |
|
|
|
|
|
|
|
для: confirm
(09.05.2012 в 19:17)
| | confirm? большое вам спасибо, что не были равнодушным!
Однако, ошибка обнаружена. И ошибка эта файафокса 12.0. Он читает javascript после условного оператора только линейно (идиотизм!). То есть, функция success1, объявленная после $.get, FF 12.0 определялась как not defined. Стоило ее перенести выше - и все заработало:
var sec = $('.reg_form input[name="sec"]').val();
$('.reg_form input[name="name"]').focusout(function() {
var name = $('#site_name').val();
if(name!=''){
window.n = name;
/*alert('name - '+name+' sec - '+sec)*/
function success1(recievData){
$('#form_notes_1').html(recievData);
}
var dates ={name:name, sec:sec};
$.get('../../reg_check.php',dates,success1,'html');
}
else{
$('#form_notes_1').html('Типа, инкогнито, да?');
}
});
|
Печаль. Халтурить начала Мозилла Фондейшн??? | |
|
|
|
|
|
|
|
для: Deed
(10.05.2012 в 00:10)
| | Ну это как сказать еще, ошибаются ли разработчики лисы в своей логике, или это у вас представление неадекватное.
<script type="text/javascript">
$(function() {
$("#f").on('click', function() {
if(2) {
$.get('',{p:1},my,'text');
}
function my(d) {
$("#q").text(d);
}
});
});
//или тут
/*
function my(d) {
$("#q").text(d);
}
*/
</script>
<input type="button" id="f" value="Send" />
<p id="q"></p>
| Как видите работает. Функцию вне условия надо разместить и...
А вы не заметили куда я помещал обработчик ответа? Зачем его ради строки выносить вверх/вниз влево/вправо?
$.get('../../reg_check.php',dates,function(rqst) {
//ваша строка
},'html');
| То есть я вам писал одно, а вы все выполняли свое же. На разных языках в общем говорили.
Вот только не хочет у меня выполнять некоторые участки кода jquery из вашего адреса. Вот это действительно интересно. Здесь о том где лучше брать jquery, как и о другом, о чем я говорил вам, а вы (как я вижу) проигнорировали.
PS. Вот такой вызов $.get как у меня, без указания url, не будет работать в IE. FF подставит адрес текущей страницы, а IE нет. Баг это или... ? | |
|
|
|
|
|
|
|
для: confirm
(10.05.2012 в 04:06)
| | ...Это фича FF.
Что касается моих вопросов и ваших ответов, я их все проанализировал, все ваши примеры реализовал. Спасибо.
Но мне нужно было понять, почему так происходит. И я это сделал. | |
|
|
|