16.06.2008, 20:57
|
|
Аспирант
|
|
Регистрация: 13.06.2008
Сообщений: 48
|
|
Проверка ввода логина и пароля
Конечно стыдно про такое спрашивать, ну ситуация вынуждает. Помогите плиз! Вот код:
<html>
</head>
<style>
#enter {
border:solid 1px white;
width:140px;
color:black;
}
</style>
<script>
function insertHTML() {
var text = "";
text += '<p>Login<p>';
text += '<input type=\"text\" id=\"login\" size=\"7\" onchange=\"checkFields()\">';
text += '<p>Pass<p>';
text += '<input type=\"password\" size=\"7\" id=\"pass\" maxlength=\"10\" onchange=\"checkFields()\">'
document.getElementById("createdBox").innerHTML = text;
}
function checkFields() {
var enterLink = document.createElement("a");
enterLink.setAttribute("id", "enter");
enterLink.href="#";
enterLink.innerHTML = "Go!";
document.getElementById("createdBox").appendChild(enterLink);
if(document.getElementById("login").value != "" && document.getElementById("pass").value != "") {
document.getElementById("enter").style.display = "block";
} else if(document.getElementById("login").value == "" || document.getElementById("pass").value == ""){
document.getElementById("enter").style.display = "none";
}
}
window.onload=insertHTML
</script>
</head>
<body>
<div id="createdBox"></div>
</body>
</html>
В функции checkFields(), я проверяю текстовые поля на наличие в них текста, если в два поля введен текст то отображается кнопка(силка) методом display:BLOCK, а если в одном из них нету текста, то кнопка должна исчезнуть методом display:NONE;
Условие такое если (ОБА текстовых поля не пустые) {
тогда переменная enterLink принимает значение display = "block";
} иначе если(ОДИН из них пуст) {
тогда переменная enterLink принимает значение display ="none";
}
Так вот тут второе условие и не работает. ПОЧЕМУ?
Когда текст ввожу в оба поля кнопка отображается, а после удаления из какого-нибудь текстового поля содержимого, то кнопка не исчезает.
Подскажите, меня может глюкнуло и я не вижу ошибки, но сижу уже целый час.
Заранее благодарен!
|
|
16.06.2008, 21:46
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
потому что у вас множественно добавляется элемент enterLink
Вот так вот работает
function checkFields()
{
if(document.getElementById("enter")==undefined)
{
var enterLink = document.createElement("a");
enterLink.setAttribute("id", "enter");
enterLink.href="#";
enterLink.innerHTML = "Go!";
document.getElementById("createdBox").appendChild(enterLink);
}
if(document.getElementById("login").value != "" && document.getElementById("pass").value != "")
{
document.getElementById("enter").style.display = "block";
}
else if(document.getElementById("login").value == "" || document.getElementById("pass").value == "")
{
document.getElementById("enter").style.display = "none";
}
}
PS Совет:пользуйтесь фаербагом.
|
|
16.06.2008, 23:58
|
|
Аспирант
|
|
Регистрация: 13.06.2008
Сообщений: 48
|
|
Класс спасибо, скажите у вас большой опыт работы с JavaScript??? Мне очень хочется знать. Еше раз спасибо.
И еше, скажите, за что в даном случае отвечает свойство undefined? За то что в начале иде проверка наличия объекта enter или того что он сначала не существует или что?
У меня стоит фаербаг но я не знаю как им пользоваться подскажите что в нем основное надо знать и куда силатся подскажите что можете.
(P.S. Буду очень признателен!). Раскажите основные приколы. Я давно поставил но не думал что он так полезен!
И ЕШЕ РАЗ СПАСИБО!!!
|
|
17.06.2008, 00:13
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Опыт работы на среднем уровне(именно так я щаз его оцениваю) у меня пару месяцев. до этого я писал на нем страшные вещи, не пользуясь примочками конкретно этого языка, по принципу "лиш бы работало хоть как-то"
Ф-ция document.getElementById() возвращает undefined, если объект не найден(в данном случае еще не создан).Таким образом мы делаем проверку на существование enterLink, и не плодим еще один такой же, если он уже был нами создан. если же нет, то создаем его).
как пользоватся фаерьагом на простейшем уровне, по моему есть в виде видео-урока, в разделе статьи. а вообще я с ним разобрался на уровне интуиции. попробуйте погуглить каку-нит ь справку по нему. больше ничего не могу посоветовать, т.к. полное описание его примочек, хотя б тех, с которыми я работаю, тянет на статью. а мне щаз лень, нет времени, etc.))
в данном случае на вкладке HTML, после каждого изменения полей вы бы увидели множащиеся enterLink, с разными style.display.
Правда я отловил ошибку и без него, так как логика скрипта четко отслеживается(на мой незамыленный взгляд)
PS Пожалуйста.
Последний раз редактировалось Gvozd, 17.06.2008 в 00:18.
|
|
17.06.2008, 00:37
|
|
Аспирант
|
|
Регистрация: 13.06.2008
Сообщений: 48
|
|
Благодарности
Все равно огромное спасибо! А на счет "до этого я писал на нем страшные вещи" цитаты Вы писали страшные вещи типа очень сложных функций и сложного прототипирования, или типа "сам не знаю что пишу"? Ну малость не въехал
Если хотите посмотрите как Вы мне помогли ну т.е. плод моего труда, и в частности Вашего. я выложу файл dynamicReg.txt а вы скажите, т.е. оцените понравилось или нет. Ну Вы можете подумать что я хвастаюсь, нет, не так, я не такой, мне просто интересны мнения разных людей по поводу моих "изделий". Я изучаю интернет психологию и мне интересно как лучше заинтересовать пользователя Напишите что не так и что можно исправить.
Очень приятно что нахожу людей себе подобных и нахожу с ними общий язык. ИХ ТУТ ТАК МНОГО НА САЙТЕ!!! Класс!!!
Жду ответа.
|
|
17.06.2008, 01:20
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
типа "сам не знаю что пишу"))))
+ множественное повторение схожих функций для разных объектов, etc...
по поводу вашего скрипта:
во первых дивы butLeft и butRight вы бы хоть раскрасили. я сперва завытыкал в пустую страницу и не мог понять что от меня хотят. не шутите так в общем)
с точки зрения эстетики, формочка мне понравилась. хорошо смотрится, и не броско.
по поводу кода:
timerID = setTimeout("moveIn()", 1);
if(start >= 0) {
clearTimeout(timerID);
}
к моменту перехода к внутренему блока условия, таймаут уже сработает, и не нуждается в очистке. но это мелкая придирка.
if(start <= 2 && start >= -365) {
заместо - 365 стоит задать реальный размер двигаемого блока, т.к. в разных браузерах, при разных настройках, цифра может и отличатся. но это отже не критично. в принципе больше ничего такого не вижу.
Кстати, а в каком месте тут моя помощ? не могу вспомнить.
|
|
17.06.2008, 13:40
|
|
Аспирант
|
|
Регистрация: 13.06.2008
Сообщений: 48
|
|
Спасибо за замечания! Исправим! А вот еше можете посмотреть. И скажите имеет ли смысл такие приколы использовать на сайтах? Например как на Рамблере?
(P.S. если можно побольше замечаний );
Этот скрипт не зависит от кода в HTML. Т.е. включил и забыл.
|
|
17.06.2008, 13:43
|
|
Аспирант
|
|
Регистрация: 13.06.2008
Сообщений: 48
|
|
А по поводу прошлого скрипта там просто кнопки картинки и задний фон тоже поэтому так плохо вышло. (P.S. вообще я случайно перепутал файлы )
|
|
17.06.2008, 18:13
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
Макс,
Такие элементы интерфейса можно, а часто и нужно использовать.
Особо хвалить ваши скрипты не буду (всё-таки примитивная задача), но подход у вас, в целом, правильный
|
|
17.06.2008, 18:42
|
|
Аспирант
|
|
Регистрация: 13.06.2008
Сообщений: 48
|
|
Спасибо! Но я не ставлю себе за задачу строить грандиозные проекты (чесно говоря, я даже не знаю что серьезного можно сделать на JS, да и вообще применение JS я могу наблюдать только в плане интерфейса страницы и все. ОДНО СЛОВО JS - это сторона клиента, а клиент - это потенциальный хакер, и этим все сказано).
Еше раз спасибо за помощь и критику они мне помогают.
Еще напишу!
|
|
|
|