|
|
|
| Есть код:
<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="Проверить"> то все нормально работает. | |
|
|
|
|
|
|
|
для: JIEXA
(20.08.2007 в 03:00)
| | Странно не то, что в Опере глючит, странно то, что вообще хоть где-то работает так как хотите.
ONCHANGE на INPUT'e срабатывает в момент потери фокуса этим INPUT'ом.
Если клиент сразу после набора текста в INPUT'e ткнул мышей в кнопку "Дальше" (или нажал ENTER), то происходит практически одновременный вызов вашей функции и сабмит формы - и одно другому никак не мешает, а идет параллельно. Пока функция у вас чего-то вызывает, ждет ответа, сабмит - вот он, практически готов. А так как ACTION в теге FORM у вас не указан, то по сабмиту грузится эта же страница. | |
|
|
|
|
|
|
|
для: CNT
(20.08.2007 в 04:10)
| | Идей как выйти из ситуации нету? | |
|
|
|
|
|
|
|
для: JIEXA
(20.08.2007 в 13:57)
| | Заменить onchange на onkeypress | |
|
|
|
|
|
|
|
для: Madman
(21.08.2007 в 14:35)
| | и при каждом нажати на калвишу будет идти проверка? глупо | |
|
|
|
|
|
|
|
для: JIEXA
(20.08.2007 в 13:57)
| | Например, можно вместо <input type=submit> и прописать <input type=button>, на которую по onclick повесить ту же функцию. | |
|
|
|
|
|
|
|
для: CNT
(21.08.2007 в 16:17)
| | и я бы предложил switch использовать | |
|
|
|