[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ошибка в setAttributeNode - помогите пожалуйста
Dron19
Всем привет, вот написал js код, но он не работает так как я задумывал,
ошибка в setAttributeNode(id);
Вот посмотрите код:

window.onload = function() {
document.getElementById('in').onfocus = form;
}
function form() {
var login = document.getElementById('log').value;
var pass = document.getElementById('pass').value;
if(login == "" && pass == "") {
// Создаем блок тэгов
var submit = document.getElementById('former');
// Получаем все тэги
var container = submit.getElementsByTagName('input');
// Создаем элемент input
var sub = document.createElement('input');
// Создаем атрибуты для элемента кнопки
var type = document.createAttribute('type');
var id = document.createAttribute('id');
// Создаем значение атрибутов
var dis = document.createAttribute('disabled');
var subval = document.createTextNode('submit');
var forDis = document.createTextNode('disabled');
var forid = document.createTextNode('in');
// Присваиваем атрибутам значения
dis.nodeValue = forDis;
id.nodeValue = forid;
type.nodeValue = subval;
// Присваиваем нашему конечному тэгу все атрибуты
sub.setAttributeNode(id).setAttributeNode(dis);
// Заменяем старую кнопку новой
submit.replaceChild(sub,container.item(2));
return false;
}
}



А вот формочка с которой я работаю:

<form action="authPW&LOG.php" method="POST" id="former" name="form" style="margin-top:5px;">
<label>
Email или логи</label><br>
<input
type="text" name="log" id="log" class="forms"><br>
<label>
Пароль</label><br>
<input
type="password" name="pass" id="pass" class="forms"><br>
<input
type="submit" class="sub" name="in" id="in" value="Войти">
</form>



подскажите, в чем проблема, просто я хотел сделать так, что бы если в полях значения не введены, то кнопка не работала, заранее спасибо. (Новичок в JavaScript)



Спустя 8 минут, 49 секунд (14.01.2011 - 23:21) Dron19 написал(а):
Жду Ваших ответов... Спасибо заранее

Спустя 15 минут, 43 секунды (14.01.2011 - 23:37) kirik написал(а):
всё немного проще
<form action="authPW&LOG.php" method="POST" id="former" name="form" style="margin-top:5px;">
<label>
Email или логи</label><br>
<input
type="text" name="log" id="log" class="forms" onkeyup="myFn()" onchange="myFn()"><br>
<label>
Пароль</label><br>
<input
type="password" name="pass" id="pass" class="forms" onkeyup="myFn()" onchange="myFn()"><br>
<input
type="submit" class="sub" name="in" id="in" value="Войти" disabled="disabled">
</form>

<script>
function
ge(id) {
return document.getElementById(id);
}

function myFn() {
ge('in').disabled = (ge('log').value == '' || ge('pass').value == '');
}
</script>

Спустя 14 минут, 41 секунда (14.01.2011 - 23:52) Dron19 написал(а):
+ тебе, работает, теперь осталось вникнуть в твой код =) Спасибо

Спустя 56 секунд (14.01.2011 - 23:53) Dron19 написал(а):
onkeyup срабатывает когда нажимаешь на кнопку, первый щелчок?

Спустя 2 минуты, 46 секунд (14.01.2011 - 23:55) Dron19 написал(а):
что-то не совсем пойму эту функцию

function myFn() {
ge('in').disabled = (ge('log').value == '' || ge('pass').value == '');
}

Спустя 42 секунды (14.01.2011 - 23:56) Dron19 написал(а):
что это означает?

ge('in').disabled

именно disabled как ты так приписываешь к функции, не могу понять, объясни пожалуйста

Спустя 1 минута, 10 секунд (14.01.2011 - 23:57) Dron19 написал(а):
заранее спасибо

Спустя 5 минут, 11 секунд (15.01.2011 - 00:03) Dron19 написал(а):
добавил этот скрипт в главный js файл вот таким образом

window.onload = function() {
document.getElementById('in').onkeyup = ge;
document.getElementById('in').onchange = myFn;
}
function ge(id) {
return document.getElementById(id);
}

function myFn() {
ge('in').disabled = (ge('log').value == '' || ge('pass').value == '');
}

и теперь не пропускает никогда, почему?

Спустя 1 минута, 26 секунд (15.01.2011 - 00:04) Dron19 написал(а):
в javascript я ночивек

Спустя 52 секунды (15.01.2011 - 00:05) Dron19 написал(а):
так все же, скажите пожалуйста, почему у меня перестал правильно работать Ваш и скрипт и можете если не сложно объяснить эту запись


function myFn() {
ge('in').disabled = (ge('log').value == '' || ge('pass').value == '');
}

Заранее благодарю

Спустя 1 час, 15 минут, 28 секунд (15.01.2011 - 01:20) kirik написал(а):
Цитата (Dron19 @ 14.01.2011 - 15:53)
onkeyup срабатывает когда нажимаешь на кнопку, первый щелчок?

онкейап срабатывает после того, как ты отпустил кнопку (на клавиатуре).

Цитата (Dron19 @ 14.01.2011 - 15:56)
именно disabled как ты так приписываешь к функции, не могу понять, объясни пожалуйста

Это тоже самое, что и
document.getElementById(id).disabled

просто вспомогательная функция ge используется для уменьшения количества кода

Цитата (Dron19 @ 14.01.2011 - 16:03)
и теперь не пропускает никогда, почему?

потому что код не верный. Там и onchange и onkeyup вызывают одну и туже функцию

Цитата (Dron19 @ 14.01.2011 - 16:05)
можете если не сложно объяснить эту запись

вот развернутый вариант без использования вспомогательной функции и без применения тернарного оператора
function myFn() {
if(document.getElementById('log').value == '' || document.getElementById('pass').value == '') {
document.getElementById('in').disabled = true;
} else {
document.getElementById('in').disabled = false;
}
}

Спустя 10 часов, 27 минут, 15 секунд (15.01.2011 - 11:48) Dron19 написал(а):
тьфу, я даже не узнал тернарный оператор, спасибо

Спустя 3 минуты, 24 секунды (15.01.2011 - 11:51) Dron19 написал(а):

function myFn() {
ge('in').disabled = (ge('log').value == '' || ge('pass').value == '');
}

disabled - это же атрибут, ему нужно дать такое же значение, то есть
disabled="disabled" и тогда сработает, а если вы просто указываете дисаблед, то что будет? Можете написать html код который в итоге должен получиться?

Спустя 30 минут, 13 секунд (15.01.2011 - 12:21) kirik написал(а):
Цитата (Dron19 @ 15.01.2011 - 03:48)
я даже не узнал тернарный оператор, спасибо

А это не тернарный оператор wink.gif Это заблуждение smile.gif

Цитата (Dron19 @ 15.01.2011 - 03:51)
disabled - это же атрибут, ему нужно дать такое же значение, то есть
disabled="disabled" и тогда сработает, а если вы просто указываете дисаблед, то что будет? Можете написать html код который в итоге должен получиться?

Не понял.. Все же в постах выше есть..

Спустя 32 минуты, 4 секунды (15.01.2011 - 12:53) Dron19 написал(а):
ну вот например есть такой тэг

<div id="testId">
<a
href="test.php">Test php</a>
</div>


Если к нему прикрутить тако скрипт:

var test = getElementById('testId');
var allLinks = test.getElementsByTagName('a');
var link = allLinks.item(0);
test.insertBefore("Какой-то текст", link);

То браузер считает уже не так:

<div id="testId">
<a
href="test.php">Test php</a>
</div>

А так:

<div id="testId">
Какой-то текст
<a href="test.php">Test php</a>
</div>


Так вот мне интересно, что браузер сделает с кнопкой после такого кода

function myFn() {
ge('in').disabled = (ge('log').value == '' || ge('pass').value == '');
}

Спустя 13 часов, 52 минуты, 9 секунд (16.01.2011 - 02:45) kirik написал(а):
Цитата (Dron19 @ 15.01.2011 - 04:53)
То браузер считает уже не так

Всмысле "не так"? Всё правильно он делает. Ты ему показываешь элемент (a) и говоришь вставить перед этим элементом текст.

Цитата (Dron19 @ 15.01.2011 - 04:53)
Так вот мне интересно, что браузер сделает с кнопкой после такого кода

Что написано, то и сделает wink.gif disabled - это атрибут элемента, и мы к этому атрибуту обращаемся, изменяя его на true или false (в зависимости от того, что вернёт нам наше выражение в скобочках).


_____________
PHP+MySQL - уже изучил, осталось всего лишь это:
C,C++,C#,JavaScript,Python,Ruby,Perl,OpenGl,DirectX,ASP.NET - Намерен учить все
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.