Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: JavaScript: что не так с if?
 
 автор: Deed   (08.05.2012 в 15:02)   письмо автору
 
 

Здравствуйте и с Наступающим вас!

Написал простенькую фанкшин проверки 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
Спасибо.

  Ответить  
 
 автор: confirm   (09.05.2012 в 00:06)   письмо автору
 
   для: 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, это менее затратно.

  Ответить  
 
 автор: Deed   (09.05.2012 в 00:33)   письмо автору
 
   для: 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(), в случае, если ему предшествует проверка условия???

  Ответить  
 
 автор: confirm   (09.05.2012 в 06:44)   письмо автору
 
   для: Deed   (09.05.2012 в 00:33)
 

Я вот обрамлял свой код ВВ-тегами [сode][/сode] при помещении его сюда, и то только сейчас обратил внимание, что написал ересь:
[\w\d\-]
а достаточно
[\w\-]

А вы вставляете код просто как текст, который не имеет отступов, его читать трудно. Мало кто захочет читать таковой, так что не забывайте о [сode][/сode].

Что касается Блин! Почему?, то достаточно закомментировать строку ajax запроса и вместо нее написать alert(1). Будете знать - выполняется ваше условие или нет. Проверить передачу/прием ajax запросов поможет отладчик, например, Firebug в FF, для этого достаточно просмотреть его вкладу Сеть.
Ищите ошибки допущенные вами, а не в самой конструкции IF, как части управляющей структуры языка.

  Ответить  
 
 автор: Deed   (09.05.2012 в 09:31)   письмо автору
 
   для: confirm   (09.05.2012 в 06:44)
 

C Праздником Вас и еще раз спасибо!
Алерт выполняется. Firebug - не отображает какого-либо события ajax. Что угодно происходит, но не ajax. Стоит убрать проверку условия - и все работает. Может, обернуть этот блок в $(document).ready()?
Бестолку...

  Ответить  
 
 автор: confirm   (09.05.2012 в 10:26)   письмо автору
 
   для: Deed   (09.05.2012 в 09:31)
 

Здасьте, приехали. ) $(document).ready() - это блок описывающий сценарии, которые будут выполняться после загрузки документа. Именно в нем идет присвоение обработчиков событий элементов, и если у вас до этого было не так, то никакой обработки любого события конечно же не будет, включая и потерю фокуса элементом.
Так что не "может обернуть", а вы обязаны были это сделать. Мой пример работает лишь потому, что скрипт идет после описания элементов на странице.

  Ответить  
 
 автор: Deed   (09.05.2012 в 10:41)   письмо автору
 
   для: confirm   (09.05.2012 в 10:26)
 

Боюсь Вам надоесть, но ничего не поменялось. Абсолютно.
Может, это существенно, но скрипт подключается под формой регистрации, ниже ее.

P.S. Меня вводит в ступор эта проблема. Любой оператор в условии выполняется, ajax же - нет!
Как такое возможно??..

  Ответить  
 
 автор: confirm   (09.05.2012 в 10:53)   письмо автору
 
   для: Deed   (09.05.2012 в 10:41)
 

Если у вас обрабатывается само событие потери фокуса, то значит обработчик его работает, другими словами с body onload у вас все нормально. Следовательно все должно работать, если выполняются условия.
Что означает "скрипт подключается под формой регистрации, ниже ее" я не знаю, так как важно не только место, но и время и способ подключения. А гадать я не буду.
Выводите на экран (можно тем же alert) все переменные, которые необходимы для данной операции, все ли у вас ОК тут.

  Ответить  
 
 автор: Deed   (09.05.2012 в 11:25)   письмо автору
 
   для: confirm   (09.05.2012 в 10:53)
 

Глубокоуважаемый confirm. Все переменные - ОК, когда есть if и когда его экранируешь.
Стоит убрать проверку условия, ajax работает. Стоит ввести проверку (даже if(1>0)) - все, ajax молчит. Firebug показывает полное отсутствие событий. Убираешь проверку - все работает.
Я сейчас создам простенький html и попробую в нем.

  Ответить  
 
 автор: confirm   (09.05.2012 в 11:45)   письмо автору
 
   для: Deed   (09.05.2012 в 11:25)
 

Прикрепите результирующий html код этой страницы, немного позже посмотрю его. Чудес не бывает - либо у вас ошибки, либо вы что-то делаете не правильно.

  Ответить  
 
 автор: Deed   (09.05.2012 в 12:40)   письмо автору
1 Кб
 
   для: confirm   (09.05.2012 в 11:45)
 

Вот, посмотрите, пожалуйста. Проще не бывает. Без проверки все работает, с проверкой - алерт выскакивает, ajax не работает.

Буду благодарен за ответ.

  Ответить  
 
 автор: confirm   (09.05.2012 в 13:48)   письмо автору
 
   для: Deed   (09.05.2012 в 12:40)
 

Загружайте jQuery с адреса как у меня в примере, и проблем не будет.
Пора переходить на utf.

  Ответить  
 
 автор: Deed   (09.05.2012 в 15:03)   письмо автору
 
   для: confirm   (09.05.2012 в 13:48)
 

Да ничего не происходит.
Подключил локальный jquery, конвертнул страницу в utf-8. Никаких изменений.
Вам разве самому не интересно, почему так?

  Ответить  
 
 автор: confirm   (09.05.2012 в 15:18)   письмо автору
 
   для: Deed   (09.05.2012 в 15:03)
 

UTF не для того, чтобы запрос заработал, а чтобы проблем меньше было.
Ваш код, с подключенным jquery по указанному мною адресу работает.
Что у вас там еще, я не знаю.

  Ответить  
 
 автор: Deed   (09.05.2012 в 19:11)   письмо автору
 
   для: confirm   (09.05.2012 в 15:18)
 

Ага! Я не удосужился проверить работоспособность скрипта в других браузерах. Во всех все работает нормально, кроме FF. Может, какой-то аддон выкаблучивается?
Проверю с отключенными плагинами. Та же картина...

FF 12.0

  Ответить  
 
 автор: confirm   (09.05.2012 в 19:17)   письмо автору
 
   для: Deed   (09.05.2012 в 19:11)
 

Я же вроде бы вам сказал уже - подключайте с другого адреса, и будет работать и FF.

  Ответить  
 
 автор: Deed   (10.05.2012 в 00:10)   письмо автору
 
   для: 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('Типа, инкогнито, да?');
        }
            
    });



Печаль. Халтурить начала Мозилла Фондейшн???

  Ответить  
 
 автор: confirm   (10.05.2012 в 04:06)   письмо автору
 
   для: 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 нет. Баг это или... ?

  Ответить  
 
 автор: Deed   (10.05.2012 в 10:23)   письмо автору
 
   для: confirm   (10.05.2012 в 04:06)
 

...Это фича FF.
Что касается моих вопросов и ваших ответов, я их все проанализировал, все ваши примеры реализовал. Спасибо.
Но мне нужно было понять, почему так происходит. И я это сделал.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования