Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как создавать динамические видимые дивы?

439
18 марта 2008 года
Rexulnik
217 / / 09.02.2005
Всем привет!
У меня такая проблема:
Есть страница с комментариями, в которых каждый комментарий выводится в отдельный div, и на каждый комментарий можно ответить на AJAX'е, но дивы которые новые дивы, которые возвращаются PHP-скриптом и вставляются в страницу не работают, т.е. они отображаются на странице но при обращении к ним и попыткам получить текст выдаётся ошибка "Требуется объект"... Как можно сделать эти дивы видимыми?
439
19 марта 2008 года
Rexulnik
217 / / 09.02.2005
может надо как-то JS переинициализировать?
352
19 марта 2008 года
skywalker
694 / / 10.02.2006
Код покажите.
439
19 марта 2008 года
Rexulnik
217 / / 09.02.2005
а какую именно часть? там много очень
439
19 марта 2008 года
Rexulnik
217 / / 09.02.2005
и тишина...
439
19 марта 2008 года
Rexulnik
217 / / 09.02.2005
так что никто не знает как переинициализировать скрипт JS и все тэги?
353
19 марта 2008 года
Nixus
840 / / 04.01.2007
Цитата: Rexulnik
так что никто не знает как переинициализировать скрипт JS и все тэги?


А что никто не знает, что вопросы нужно уметь правильно задавать и телепатов тут нет?

439
19 марта 2008 года
Rexulnik
217 / / 09.02.2005
Цитата: Nixus
А что никто не знает, что вопросы нужно уметь правильно задавать и телепатов тут нет?



А что я не так задал???
У меня есть дивы в которые вставляются динамически другие дивы и при обращении к этим новым дивам происходит ошибка Нет объекта. Что тут непонятного?

352
19 марта 2008 года
skywalker
694 / / 10.02.2006
Цитата: Rexulnik
а какую именно часть? там много очень


начиная со строки 125 и заканчивая строкой 207... :D

439
19 марта 2008 года
Rexulnik
217 / / 09.02.2005
Цитата: skywalker
начиная со строки 125 и заканчивая строкой 207... :D



А чего не с 1?

2.1K
19 марта 2008 года
wAngel
129 / / 23.11.2004
Цитата: Rexulnik
А чего не с 1?



Покажите весь когд JS.

271
19 марта 2008 года
MrXaK
721 / / 31.12.2002
хз, я когда вставляю новые полученный от бекенда текст в див через innerHTML, то все внутренние дивы потом нормально получаются через getElementById.. во всех браузерах.. то что если вы делаете не так, то нужен код))
271
19 марта 2008 года
MrXaK
721 / / 31.12.2002
вот банально, код работает
 
Код:
<div id="aaa"></div>
<input type=button name=a value=a &#111;&#110;Click="document.getElementById('aaa').innerHTML = '<div id=bbb></div>';document.getElementById('bbb').innerHTML = 'text';">
12
19 марта 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: Rexulnik
и тишина...


А чего писать то? Ты ясно с кодом накосячил, чего тут можно обсуждать?

Я вот тут: ixbt.com/soft/ajax.shtml подгружал данные с бэкэнда через JS и все было нормально. Если у тебя нечто подобное не получается, то у тебя ясно косяки в коде.

353
19 марта 2008 года
Nixus
840 / / 04.01.2007
Цитата: Rexulnik
А что я не так задал???
У меня есть дивы в которые вставляются динамически другие дивы и при обращении к этим новым дивам происходит ошибка Нет объекта. Что тут непонятного?


Как ты к внутренним дивам обращаешся? Силой мысли? Или все-таки кодом, который неплохо было бы показать, а не проводить семинар по телепатии.

12
20 марта 2008 года
alekciy
3.0K / / 13.12.2005
Думается мне, что автор не имеет понятия о DOM API реализации под JavaScript и поэтому бродить по дереву всплепую.
28K
20 марта 2008 года
Babutta
16 / / 07.02.2008
Rexulnik, можешь показать кусок кода, который создаёт новый див, и кусок кода, который к нему впоследствии обращается?
28K
20 марта 2008 года
Babutta
16 / / 07.02.2008
Вообще, создавать новые дивы через innerHTML не совсем правильно.
Стоит попробовать так:

 
Код:
var newDiv = document.createElement("div");

newDiv.setAttribute('id','тут пишем id нового дива');

document.getElementById('тут id родительского дива').appendChild(newDiv);


Так будет правильнее.
439
20 марта 2008 года
Rexulnik
217 / / 09.02.2005
Это PHP который выводит комменты при загрузке и такой же код возвращает сервак на AJAX'е:
Код:
function getcomments($id, $status, $karma, $commkarma, $commmin, $lastcomment, $login)
    {
        $rs = mysql_query('SELECT id, text, date, login FROM comments WHERE parrent_id = '.$id);
        while ($a = mysql_fetch_array($rs))
        {
            $s .= "\r\n".'<div id="'.$a['id'].'"><dd id="'.$a['id'].'">'.date('d.m.Y H:i:s', $a['date']);
            $s .= '<div id="t'.$a['id'].'">'.stripslashes($a['text']).'</div>';
            $tmp = getcomments($a['id'], $status, $karma, $commkarma, $commmin, $lastcomment, $login);
            if (strlen($tmp))
                $s .= '<dl>'.$tmp.'</dl>';
            $s .= '<br /><a href="#" &#111;&#110;click="showForm('.$a['id'].');return false;">Answer</a>';
            $s .= '<br /><a href="#" &#111;&#110;click="showForm('.$a['id'].');return false;">Answer</a>';
            $s .= '</dd></div>'."\r\n";
        }
        return $s;
    }
    $rs = mysql_query('SELECT id, text, date, login FROM comments WHERE parrent_id = 0 AND blog_id = '.$blog);
    while ($a = mysql_fetch_array($rs))
    {
        $s .= '<div id="'.$a['id'].'"><dl>'.date('d.m.Y H:i:s', $a['date']);
        $s .= '<div id="t'.$a['id'].'">'.stripslashes($a['text']).'</div>';
        $s .= '<br /><a href="#" &#111;&#110;click="showForm('.$a['id'].');return false;">Answer</a>';
        $s .= getcomments($a['id'], $status, $karma, $commkarma, $commmin, $lastcomment, $login)."</dl></div>\r\n";
    }


Это JS:

Код:
<script>
function loadXMLDoc(url, poststr, id)
{
    req = null;
    if (window.XMLHttpRequest)
    {
        try
        {
            req = new XMLHttpRequest();
        }
        catch (e) { }
    }
    else if (window.ActiveXObject)
    {
        try
        {
            req = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch (e)
        {
            try
            {
                req = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch (e) { }
        }
    }
 
    if (req)
    {
        req.onreadystatechange = processReqChange;
        req.open("POST", url, true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=windows-1251;");
        req.setRequestHeader("Content-length", poststr.length);
        req.setRequestHeader("Connection", "close");

        req.send(poststr);
        reqTimeout = setTimeout("req.abort();", 5000);
    }
    else
    {
        alert("Your browser not supports AJAX");
    }
}

idt = 0;

function processReqChange()
{
    if (req.readyState == 4)
    {
        clearTimeout(reqTimeout);
 
        if (req.status == 200)
        {
            document.getElementById("comments").innerHTML = req.responseText;
        }
        else
        {
            alert("Can't get data.");
        }
    }  
}

function requestdata(params, id)
{
    var poststr = "text=" + cyrEsc(document.getElementById("text").value);
    if (id == 'comments')
    {
        poststr += "&id=0" + "&tid=" + idb;
        document.getElementById("showcomm").innerHTML = '';
    }
    else
    {
        poststr += "&id=" + id + "&tid=" + idb;
        document.getElementById("showcomm").innerHTML = '';
    }

    loadXMLDoc('addcomment.php', poststr, id);
}

oldtext = '';

oldid = 0;

function showForm(id)
{
    document.getElementById("showcomm").innerHTML = '';
    if (oldid == id)
        return;
    if (oldid != '')
        document.getElementById(oldid).innerHTML = oldtext;
    alert(idt);
    oldtext = document.getElementById(id).innerHTML;
    document.getElementById(id).innerHTML = document.getElementById(id).innerHTML + '<dd><form action="java script:requestdata(document.getElementById(\'form1\'), ' + id + ');" method="post" name="form1" id="form1"><textarea name="text" cols=30 rows=3></textarea></dd><dd><input type="button" &#111;&#110;click="onview(document.form1.text.value, '
         + id + ');" name="view" value=" View " /> <input type="submit" name="submit" &#111;&#110;click="idt = \'t'
         + id + '\';" value=" Add " /></form></dd>';
    oldid = id;
    flag = false;
}
</script>
<body>
<div id="comments"><?php print $s; ?></div>
</body>
<div id="showcomm">
</div>
439
20 марта 2008 года
Rexulnik
217 / / 09.02.2005
Со всеми дивами правильно работает а с новыми ошибка (((
271
21 марта 2008 года
MrXaK
721 / / 31.12.2002
посмотри всё это дело в мозилле с фаербагом... какой ответ приходит от сервака, как всё вставляется, и правильно ли имена у дивов получаются
353
21 марта 2008 года
Nixus
840 / / 04.01.2007
Где вызывается showForm и с какими параметрами? В какой строчке ошибка?
439
21 марта 2008 года
Rexulnik
217 / / 09.02.2005
Цитата: Nixus
Где вызывается showForm и с какими параметрами? В какой строчке ошибка?



showForm вызывается для каждого комментария, под ним динамически вставляется форма. А ошибка в строчке обращения к к не существующему диву: oldtext = document.getElementById(id).innerHTML;

Код:
function showForm(id)
{
    document.getElementById("showcomm").innerHTML = '';
    if (oldid == id)
        return;
    if (oldid != '')
        document.getElementById(oldid).innerHTML = oldtext;
    oldtext = document.getElementById(id).innerHTML; // Вот здесь выскакивает ошибка "Требуется объект"
    document.getElementById(id).innerHTML = document.getElementById(id).innerHTML + '<dd><form action="java script:requestdata(document.getElementById(\'form1\'), ' + id + ');" method="post" name="form1" id="form1"><textarea name="text" cols=30 rows=3></textarea></dd><dd><input type="button" &#111;&#110;click="onview(document.form1.text.value, '
         + id + ');" name="view" value=" View " /> <input type="submit" name="submit" &#111;&#110;click="idt = \'t'
         + id + '\';" value=" Add " /></form></dd>';
    oldid = id;
    flag = false;
}
353
21 марта 2008 года
Nixus
840 / / 04.01.2007
Вставь перед строкой, вызывающей ошибку, alert(id); и посмотри какое значение покажет. Есть подозрение, что передается неправильный идентификатор.
Возможно проблема в том, что у тебя несколько элементов с одинаковыми id.
12
21 марта 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: Nixus

Возможно проблема в том, что у тебя несколько элементов с одинаковыми id.


Чего быть не должно в принципе )

439
21 марта 2008 года
Rexulnik
217 / / 09.02.2005
Цитата: Nixus
Вставь перед строкой, вызывающей ошибку, alert(id); и посмотри какое значение покажет. Есть подозрение, что передается неправильный идентификатор.
Возможно проблема в том, что у тебя несколько элементов с одинаковыми id.



Да, что-то я кажись там с ID намутил, я то убрал всё, заменил новым кодом:

Код:
function showForm(id)
{
    document.getElementById("showcomm").innerHTML = '';
    if (oldid == id)
        return;
    if (oldid != '')
        document.getElementById(oldid).innerHTML = oldtext;
    oldtext = document.getElementById(id).innerHTML;
    document.getElementById(id).innerHTML = document.getElementById(id).innerHTML + '<dd><form action="java script:requestdata(document.getElementById(\'form1\'), \'' + id + '\');" method="post" name="form1" id="form1"><textarea name="text" cols=30 rows=3></textarea></dd><dd><input type="button" &#111;&#110;click="onview(document.form1.text.value, \''
         + id + '\');" name="view" value=" View " /> <input type="submit" name="submit" &#111;&#110;click="idt = \''
         + id + '\';" value=" Add " /></form></dd>';
    oldid = id;
    flag = false;
}


Этот код абсолютно нормально работает в опере и всё правильно выполняется, а в IE выдаёт "неизвестную ошибку" на строке
 
Код:
document.getElementById(id).innerHTML = document.getElementById(id).innerHTML + '<dd><form action="java script:requestdata(document.getElementById(\'form1\'), \'' + id + '\');" method="post" name="form1" id="form1"><textarea name="text" cols=30 rows=3></textarea></dd><dd><input type="button" &#111;&#110;click="onview(document.form1.text.value, \''

причём когда заменить форму на скажем "<p></p>" то всё работает... IE чего-то не даёт вставить форму в див... в чём может быть причина?
439
22 марта 2008 года
Rexulnik
217 / / 09.02.2005
Может это 1 из очередных лагов IE?
439
24 марта 2008 года
Rexulnik
217 / / 09.02.2005
ура, всё работает! это оказывается всё было из-за тэга dd... всем спасибо.
12K
25 марта 2008 года
malc
13 / / 31.12.2005
попробуй так создавать коментарии:
вроде сочинил то что те нужно)

<script>
var countComents=0;
function add_div()
{
countComents++;
text=document.getElementById("coment").value;
newDiv=document.createElement("DIV");
newDiv.innerHTML="Coment #"+countComents+": "+text;
document.getElementById("main_coment_field").appendChild(newDiv);
}
</script>
<div id='main_coment_field'>Coments:
</div>
<input type="text" id="coment" size="50">
<input type="button" value="Add_new_div" onclick="add_div()">

сори писал быстрым ответом код красиво не оформил
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог