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

HTML+CSS+JavaScript

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

 

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

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

тема: Осваиваю appendChild
 
 автор: mikado3333   (26.12.2012 в 21:28)   письмо автору
 
 

Приветствую. Помогите разобраться в следующем:

Есть код


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">


<html>
<head>
<title></title>
        <style type = "text/css">
        
            .tavop {position:absolute;left:10px;width: 320px; height:30px; overflow:auto;}
            .taotv {position:absolute;left:330px;width: 320px; height:30px; overflow:auto;}
        </style>
            .
                <script type="text/javascript">   
                <!--
                
                function f_()  // пустое поле ФИО ОТВЕЧАЮЩЕГО при фокусе
        {
            
            var n1 = document.getElementById('otv').value;
            
                if (n1 == 'ОТВЕТ')
                {
                    document.getElementById('otv').value = " ";
                }
                
        }
                
                function f_dop_vop()   {////////////////////////////////////////////добавить вопрос
        
                var Form = document.getElementById('great');
                var P = document.createElement('p');
                var Br = document.createElement('br');
                var Inner = document.createElement('textarea');
                    Inner.type = 'text';
                    Inner.value = 'НАЗВАНИЕ ВОПРОСА';
                    Inner.name = 'VOPROS';
                    Inner.className =  'tavop';
                Form.appendChild(P);    
                Form.appendChild(Br);    
                Form.appendChild(Inner);
                Form.appendChild(Br);    
    
                                                }
                                                
            function f_dop_otv()   {////////////////////////////////////////////добавить ответ
        
                var Form = document.getElementById('great');
                var P = document.createElement('p');
                var Br = document.createElement('br');
                var Inner = document.createElement('textarea');
                    Inner.type = 'text';
                    Inner.value = 'ОТВЕТ';
                    Inner.name = 'OTVET';
                    Inner.id = 'otv';
                    Inner.className =  'taotv';
                    Inner .ondblclick= f_();
                Form.appendChild(P);    
                Form.appendChild(Br);    
                Form.appendChild(Inner);
                Form.appendChild(Br);    
    
                                                }
                //-->
            </script>

</head>
<body>

<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////Интерфейс,//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  //-->
    <div style = "position: relative;">
    
    <script type="text/javascript">   
                <!--
                
                document.write ('ОПРОС');
    //-->
            </script>
            <br>
    
        <form method ="post" action = "NE.php" id="great" >
        
        <input name = "OPROS" value ="НАЗВАНИЕ ОПРОСА" > <br><br>
                <input type="button" value="ДОБАВИТЬ ВОПРОС" onclick="f_dop_vop();" id="button1" style = "float:left;"> 
                <input type="button" value="ДОБАВИТЬ ОТВЕТ" onclick="f_dop_otv();" id ="button2"> 
         
            
        </form>
</div>




</body>
</html>


Не работает кнопка добавить ответ. Идея была такова : при нажатии кнопки ответ добавляется поле <textarea> . затем при двойном клике поле очищается от слова ОТВЕТ. Может функцию очистки ( f_() ) вызываю не правильно?

  Ответить  
 
 автор: ЯСА   (27.12.2012 в 09:34)   письмо автору
 
   для: mikado3333   (26.12.2012 в 21:28)
 

назначать функцию следует без скобок, только имя
Inner .ondblclick= f_()

и ещё - ваши "вторые" теги <br> в обоих функциях не пропишутся
<script>
onload = function ()
{
var inp = document.createElement ('input');
document.body.appendChild (inp); // первый раз

document.body.appendChild (inp); // второй раз

// второй раз не нарисует, но и ошибки в консоли не даст
// надо сделать клон, и уже клон второй раз приживлять

var myclon = inp.cloneNode (0);
myclon.value = 'CLON';
document.body.appendChild (myclon);
}
</script>

при изучении активнее пользуйтесь консолями ошибок в разных браузерах

узнать способы вызова консоли ошибок для вас сейчас - самая главная задача
а кнопка "Очистить" внутри этой консоли ошибок - самая важная кнопка

в Mozilla и Chrome -- Ctrl+Shift+J или через меню
в Opera -- Ctrl+Shift+O или через меню
в MSIE - через меню
в Safari - через клик правой кнопкой мыши по странице с выбором в контекстном меню пункта "Проверить объект"

  Ответить  
 
 автор: mikado3333   (27.12.2012 в 12:24)   письмо автору
 
   для: ЯСА   (27.12.2012 в 09:34)
 

Спасибо ЯСА! С <br> все поучилось. Но вот при создании еще одного поля Textarea этот вариант не проходит.








            function f_dop_otv()   {////////////////////////////////////////////добавить ответ
        
                var Form = document.getElementById('great');
                var P = document.createElement('p');
                var Br = document.createElement('br');
                var Inner = document.createElement('textarea');
                var BBr = Br.cloneNode(0);
                var Inner1 = Inner.clonNode(0);
                Inner1.value = 'Clon';
                    Inner.type = 'text';
                    Inner.value = 'ОТВЕТ';
                    Inner.name = 'OTVET ';
                    Inner.id = 'otv';
                    Inner.className =  'taotv';
                    Inner .onfocus= f_;
                Form.appendChild(P);    
                Form.appendChild(Br);    
                Form.appendChild(Inner);
                Form.appendChild(BBr);
                Form.appendChild(Inner1);
    
                                                }



И еще одна проблемка -Функция очистки (f_) поля заработала, но работает только в первом созданном элементе. а при выборе второго элемента очищается опять первый.

  Ответить  
 
 автор: ЯСА   (27.12.2012 в 13:06)   письмо автору
 
   для: mikado3333   (27.12.2012 в 12:24)
 

функция f_ () у вас "заточена" под очистку значения в элементе с id="otv"

таковой элемент на странице у вас один (и должен быть один - значение id должно быть уникальным в пределах документа)

соответственно, она и "очищает" только первое созданное <textarea>

если хотите сделать очистку "универсальной", тогда вовсе ликвидируйте поименованную функцию f_ ()
а прописывайте безымянную функцию вот так:
// создаёте виртуальное первое <textarea> (оно ведь ещё не на странице, поэтому "виртуальное")                
var Inner = document.createElement ('textarea');
Inner.type = 'text'; // ЗАЧЕМ вам это - не понимаю, у тега <textarea> НЕТ атрибута TYPE
Inner.value = 'ОТВЕТ';
Inner.className = 'taotv';

// и только ЗАТЕМ создаёте второе виртуальное <textarea>
// и это второе <textarea> будет наследовать все ОБЩИЕ свойства, кои вы прописали для первого
// а именно type, value, className
var Inner1 = Inner.cloneNode (0); // здесь у вас ошибка была - надо cloneNode

// и только ПОТОМ, если надо, "раздаёте" индивидуальные признаки - а именно NAME и ID
// имена и id должны содержать ТОЛЬКО: 1) латинские буквы, 2) арабские цифры, 3) символ _
// причём начинаться должны с буквы
// а у вас в имени недопустимый пробел имеется
Inner.name = 'OTVET'; Inner.id = 'otv';
Inner1.name = 'OTVET1'; Inner.id = 'otv1';

// кроме того, запомните: функции по событиям НЕ НАСЛЕДУЮТСЯ
// поэтому их тоже надо "раздавать" всем по-отдельности
Inner.onfocus = function () {this.value = ''} 
Inner1.onfocus = function () {this.value = ''} 

// а id, в принципе, вам уже не нужны, ибо функции назначены "напрямую"

// меняете для второго то, что уже назначено ранее для первого и вторым
// унаследовано, а требуется иное  - я о значении VALUE
Inner1.value = 'Clon';

// и, наконец, оба ваших "виртуала" "приживляете" на страницу
// причём в нужном вам порядке (здесь - первый и второй, но можно и наоборот)
Form.appendChild (Inner);
Form.appendChild (Inner1); 

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

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