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

HTML+CSS+JavaScript

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

 

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

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

тема: Атрибут onchange у input'а
 
 автор: JIEXA   (20.08.2007 в 03:00)   письмо автору
 
 

Есть код:

<form method="post" id="registerform" enctype="multipart/form-data">
<input name="login" id="login" type="text" size="30" value="" onchange='checkLogin();'>
<input type="submit" value="Дальше">
</form>


При вводе в поле с именем login через AJAX идет проверка, занят логин или нет. Вот почему то Opera странно на это реагирует, а точнее если ввести ник, AJAX сделать запрос выведет результат можно ли использовать логин или нет, то потом при нажатии на кнопку "Дальше" почему то submit формы не происходит, а открывается новая страница с этим же URL и в конце URL добавляется null. А если не вводить ничего в поле login - просто нажать на кнопку "Дальше", то все нормально. Если убрать onchange="checkLogin();" то тоже все нормально. Глюк замечен тока в Опере... Как бороться?

Вот навсякий случай код функции checkLogin():

function checkLogin()
{
    var req = new JsHttpRequest();
    
        req.onreadystatechange = function() {
        if (req.readyState == 4) {
            
            document.getElementById('checklogin').innerHTML = req.responseText;

            if(req.responseJS.status === "1")
            {
                document.getElementById('checklogin').innerHTML = 'вы можете использовать данный логин';
                document.getElementById('checklogin').style.color = 'green';
            }
            else if(req.responseJS.status == "2")
            {
                document.getElementById('checklogin').innerHTML = 'данный логин занят, придумайте другой';
                document.getElementById('checklogin').style.color = 'red';
            }
            else if(req.responseJS.status == "3")
            {
                document.getElementById('checklogin').innerHTML = 'логин должен быть не меньше 3-х симолов';
                document.getElementById('checklogin').style.color = 'red';
            }
            else if(req.responseJS.status == "4")
            {
                document.getElementById('checklogin').innerHTML = 'в логине можно использовать только английские буквы и цифры';
                document.getElementById('checklogin').style.color = 'red';
            }

        }
    }
    
    req.open(null, '/ajax/checkLogin.php', true);
    req.send( { 'login': document.getElementById('login')} );
}


Да и именно глюк происходит если вызывать функцию через onChange().... Если просто сделать кнопочку <input type="button" onclick="checkLogin();" value="Проверить"> то все нормально работает.

   
 
 автор: CNT   (20.08.2007 в 04:10)   письмо автору
 
   для: JIEXA   (20.08.2007 в 03:00)
 

Странно не то, что в Опере глючит, странно то, что вообще хоть где-то работает так как хотите.

ONCHANGE на INPUT'e срабатывает в момент потери фокуса этим INPUT'ом.
Если клиент сразу после набора текста в INPUT'e ткнул мышей в кнопку "Дальше" (или нажал ENTER), то происходит практически одновременный вызов вашей функции и сабмит формы - и одно другому никак не мешает, а идет параллельно. Пока функция у вас чего-то вызывает, ждет ответа, сабмит - вот он, практически готов. А так как ACTION в теге FORM у вас не указан, то по сабмиту грузится эта же страница.

   
 
 автор: JIEXA   (20.08.2007 в 13:57)   письмо автору
 
   для: CNT   (20.08.2007 в 04:10)
 

Идей как выйти из ситуации нету?

   
 
 автор: Madman   (21.08.2007 в 14:35)   письмо автору
 
   для: JIEXA   (20.08.2007 в 13:57)
 

Заменить onchange на onkeypress

   
 
 автор: JIEXA   (21.08.2007 в 15:46)   письмо автору
 
   для: Madman   (21.08.2007 в 14:35)
 

и при каждом нажати на калвишу будет идти проверка? глупо

   
 
 автор: CNT   (21.08.2007 в 16:17)   письмо автору
 
   для: JIEXA   (20.08.2007 в 13:57)
 

Например, можно вместо <input type=submit> и прописать <input type=button>, на которую по onclick повесить ту же функцию.

   
 
 автор: bronenos   (21.08.2007 в 20:27)   письмо автору
 
   для: CNT   (21.08.2007 в 16:17)
 

и я бы предложил switch использовать

   
Rambler's Top100
вверх

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