Гость
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проблема с обработкой checkbox из XML-потока / 21 сообщений из 21, страница 1 из 1
13.12.2006, 11:59
    #34195983
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
есть функция, которая обрабатывает тело XML-потока
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
function recRootNode (node, numbNode, obj, newNode){

        var number_of_nodes = node.childNodes.length;
        if ( !obj ) obj = document.body;
        for ( var i =  0  ; i < number_of_nodes ; i++) {
                var newChild        = false;
                var tagName         = node.childNodes[i].tagName || '';
                var numb_childNodes = node.childNodes[i].childNodes.length || '';
                var id              = node.childNodes[i].getAttribute('id');
                var value           = false;
                if ( node.childNodes[i].firstChild ) value   = node.childNodes[i].firstChild.nodeValue || false;

                if ( id != null || id == '' ) {
                        if ( id && document.getElementById(id) && document.getElementById(id).tagName.toLowerCase() == tagName ) {
                                var newObject = document.getElementById(id);
                        } else {
                                var newObject = document.createElement(tagName);
                                newChild = true;
                        }
                        if ( node.childNodes[i].attributes )
                        for ( var ii =  0  ; ii < node.childNodes[i].attributes.length ; ii++ ) {
                                var atributeName  = node.childNodes[i].attributes[ii].name;
                                var atributeValue = node.childNodes[i].attributes[ii].value;
                                if ( atributeValue != '' ) {
                                        set_atribute(newObject, atributeName, atributeValue);
                                }
                        }
                }
                if ( value ) set_atribute(newNode, tagName, value);
                if ( numb_childNodes >  0  && !value ) recRootNode(node.childNodes[i], numb_childNodes,newObject, newObject);
                if ( newObject && newChild ) obj.appendChild(newObject);
            }
        return ;
}
которая вызывается при получении XML-потока
Код: plaintext
1.
2.
var xmldoc = seq.responseXML;
var root_nodes = xmldoc.getElementsByTagName("root")[ 0 ];
out = recRootNode(root_nodes); 

Сам XML-поток

Код: plaintext
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="windows-1251"?>
<root>
      <div id="0.14656300 1165999404">
           <input id="catalogParent12_0.13948600" type="checkbox" name="catalogParent[]" value="12" onclick="check_other_checkbox(this.form,this)" checked="1"/>
           <input id="catalogParent48_0.13948600" type="checkbox" name="catalogParent[]" value="48" onclick="check_other_checkbox(this.form,this)"/>
      </div>
</root>
На странице отображается див с двумя checkbox, но первый checkbox не отмечается и событие onСlick не отслеживается...
Если добавить еще один checkbox, то только у последнего будет обрабатываться событие onClick
в чем может быть проблема?
________________________
Спроси, может отвечу ;)
icq 111718060
...
Рейтинг: 0 / 0
14.12.2006, 13:34
    #34199831
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
Помогите, очень серьёзно встала проблема с этими чекбоксами... ЗП могут урезать...
Сделал обходной путь (в XML-потоке сначало указываю на создание cheackbox, а потом в нём же прописываю javascript, который этот cheackbox отмечает и запихивает в его параметр value данные, а к событию onClick подсовывает нужный javascrip), но етот обход не устраивает начальство :(
________________________
Спроси, может отвечу ;)
icq 111718060
...
Рейтинг: 0 / 0
14.12.2006, 14:05
    #34199995
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
Т.е. клик отрабатывается только на чеках, которые не отмечены, я правильно понял?

Кстати, лучше всё-таки в качестве значения для checked использовать "checked", а не "1". Оно вроде и пофиг (по крайней мере для IE), но по новым стандартам правильней.
...
Рейтинг: 0 / 0
14.12.2006, 14:58
    #34200243
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
SkyLightТ.е. клик отрабатывается только на чеках, которые не отмечены, я правильно понял?

Кстати, лучше всё-таки в качестве значения для checked использовать "checked", а не "1". Оно вроде и пофиг (по крайней мере для IE), но по новым стандартам правильней.
нет... такие параметры, как name, onclick сохраняются только для последнего checkbox из XML-потока... т.е.
если один checkbox, то все нормально работает
если 2, то работает нормально тока второй
если 3 , то работает только третий .... итд...

самое интересное, если например name заменить на tname, то tname сохраняется у всех checkbox нормально... просто name у предыдущих обнуляется и остается только у последнего как и onclick
...
Рейтинг: 0 / 0
14.12.2006, 15:00
    #34200255
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
SkyLightКстати, лучше всё-таки в качестве значения для checked использовать "checked", а не "1". Оно вроде и пофиг (по крайней мере для IE), но по новым стандартам правильней.
ни checked="checked", ни checked="1" не отмечают checkbox
...
Рейтинг: 0 / 0
14.12.2006, 15:18
    #34200345
PhoenixNET
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
@RuSHA
ни checked="checked", ни checked="1" не отмечают checkbox
Дык попробуй просто <input type=chekbox CHECKED>
...
Рейтинг: 0 / 0
14.12.2006, 15:21
    #34200355
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
@RuSHA SkyLightКстати, лучше всё-таки в качестве значения для checked использовать "checked", а не "1". Оно вроде и пофиг (по крайней мере для IE), но по новым стандартам правильней.
ни checked="checked", ни checked="1" не отмечают checkbox
Код: plaintext
<input type="checkbox" name="name" value="value" checked>
...
Рейтинг: 0 / 0
14.12.2006, 15:23
    #34200365
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
Судя по responseXML, ты юзаешь AJAX, так? А почему бы возвращать ответ не в виде xml, а в виде html и потом просто присваивать этот ответ в innerHTML контейнера? Тем более, что у тебя все ноды всё равно описаны как html-теги. Да и жабаскрипт получится значительно короче.
...
Рейтинг: 0 / 0
14.12.2006, 15:33
    #34200408
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
Black @RuSHA SkyLightКстати, лучше всё-таки в качестве значения для checked использовать "checked", а не "1". Оно вроде и пофиг (по крайней мере для IE), но по новым стандартам правильней.
ни checked="checked", ни checked="1" не отмечают checkbox
Код: plaintext
<input type="checkbox" name="name" value="value" checked>

аха... запихни это в XML ;)
...
Рейтинг: 0 / 0
14.12.2006, 15:33
    #34200412
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
2 PhoenixNET и Black:
Вообще-то сейчас без разницы - писать checked или checked="checked", т.к. уже само наличие этого аттрибута ставит галочку, просто второй вариант обязателен для стандарта XHTML, да и красивше, как по мне.

2 @RuSHA:
А вот в там, где у тебя идет финальное добавление объекта к странице obj.appendChild(newObject);, посмотри-ка, какой HTML-код содержится в newObject.
...
Рейтинг: 0 / 0
14.12.2006, 15:39
    #34200439
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
SkyLightСудя по responseXML, ты юзаешь AJAX, так? А почему бы возвращать ответ не в виде xml, а в виде html и потом просто присваивать этот ответ в innerHTML контейнера? Тем более, что у тебя все ноды всё равно описаны как html-теги. Да и жабаскрипт получится значительно короче.
у меня и html обрабатывается тоже, но в данной ситуации мне нужно из XML-потока (в котором возращаются несколько cheackbox) построить в определенном месте определённого вида форму.. всё строится, только последний cheackbox сохраняет нужные данные (name и onclick) и не отмечаются... хотя если в javascript написать
document.getElementById ( 'chk_box' ).checked = 1;
или
document.getElementById ( 'chk_box' ).checked = true;

он отмечается, моя функция это делает, но при appendChild почемуто флаг слетает.. тоесть если до этого вывести алерт, то он true, после appendChild сразу false :(
...
Рейтинг: 0 / 0
14.12.2006, 15:56
    #34200533
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
Пришла тут в голову идея вот только не знаю, прокатит или нет. Я смотю, ты парсишь полученный XML, а потом на остове его создаешь html-элементы, правильно? А что если из xml-потока просто вытащить ветку div и без лишних манипуляций через appendChild прикинуть её куда надо?
...
Рейтинг: 0 / 0
14.12.2006, 15:57
    #34200538
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
SkyLight
2 @RuSHA:
А вот в там, где у тебя идет финальное добавление объекта к странице obj.appendChild(newObject);, посмотри-ка, какой HTML-код содержится в newObject.
Код: plaintext
1.
<INPUT id="catalogParent12_0.13948600" type=checkbox tname="catalogParent[]"/>
<INPUT id="catalogParent48_0.13948600" type="checkbox" />
...
Рейтинг: 0 / 0
14.12.2006, 16:15
    #34200595
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
SkyLightПришла тут в голову идея вот только не знаю, прокатит или нет. Я смотю, ты парсишь полученный XML, а потом на остове его создаешь html-элементы, правильно? А что если из xml-потока просто вытащить ветку div и без лишних манипуляций через appendChild прикинуть её куда надо?

Это не выход, мне нужно обрабатывать каждый узел XML-потока, может быть ситуация разноса по разным частям, т.е. в теле XML-потока может прийти див с id который уже создан был когдато на странице, тогда он следующие узлы будет пихать в уже существующий, но если один из вложеных узлов будет тоже иметь id, элемента созданого в другом месте, то он изменет существующий, а не добавит в див
...
Рейтинг: 0 / 0
14.12.2006, 16:45
    #34200736
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
А попробуй-ка вот этот кусок:

Код: plaintext
1.
2.
if ( atributeValue != '' ) {
    set_atribute(newObject, atributeName, atributeValue);
}

заменить на

if ( atributeValue != '' ) {
if (atributeName=='onclick'){
newObject.onclick=function(){eval(atributeValue)};
continue;
}
set_atribute(newObject, atributeName, atributeValue);
}

Лично у меня работает. Проверено в IE7, Лисе, Опере.
...
Рейтинг: 0 / 0
14.12.2006, 16:47
    #34200749
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
set_atribute(newNode, tagName, value) это моя функция в которой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
if (newNode)
        switch (tagName) {
                case 'innerHTML':
                                 newNode.innerHTML += value;
                                 break;
...
                case 'onchange':
                                 newNode.onchange      = function () { eval(value) };
                                 break;
                case 'onclick':
                                 //newNode.attachEvent("onclick",function(){eval(value)});
                                 newNode.onclick      = function () { eval(value) };
                                 break;
...
                default :
                                 if (newNode)newNode[tagName] = value;
        }
}
_____
___________________
Спроси, может отвечу ;)
icq 111718060
...
Рейтинг: 0 / 0
14.12.2006, 17:27
    #34200906
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
Ну вот это должно сработать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Untitled Page</title>

    <script language="javascript" type="text/javascript">
    function XMLParser(text){
        if (window.ActiveXObject){
            var doc=new ActiveXObject("Microsoft.XMLDOM");
            doc.async="false";
            doc.loadXML(text);
        }else{
            var parser=new DOMParser();
            var doc=parser.parseFromString(text,"text/xml");
        }
        return doc;
    }
    function fn(){
        alert('ok');
    }
    function f(){
        var text='<root><div id="0_14656300_1165999404"><input id="catalogParent12_0_13948600" type="checkbox" name="catalogParent[]" value="12" onclick="fn()" checked="1"/><input id="catalogParent48_0_13948600" type="checkbox" name="catalogParent[]" value="48" onclick="fn()"/></div></root>';
        var xml=XMLParser(text);
        f2(document.getElementById('container'),xml.documentElement);
    }
    function f2(_container,node){
        var item;
        var attr;
        for (var i=node.firstChild; i; i=i.nextSibling){
            if (i.nodeType!= 1 ) continue;
            item=document.createElement(i.nodeName);
            for(var j= 0 ; j<i.attributes.length; j++){
                var _name=i.attributes[j].name;
                var _value=i.attributes[j].value;
                if (_name=='onclick'){
                    item.onclick=function(){eval(_value)};
                    continue;
                }
                attr=document.createAttribute(_name);
                attr.value=_value;
                item.attributes.setNamedItem(attr);
            }
            _container.appendChild(item);
            if (i.hasChildNodes()) f2(_container,i);
        }
    }
    </script>

</head>
<body>
    <button onclick="f()">Test</button>
    <div id="container"></div>
</body>
</html>
...
Рейтинг: 0 / 0
14.12.2006, 18:36
    #34201120
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
SkyLightНу вот это должно сработать:

Аха... это у у меня оказывается работает для
Код: plaintext
1.
2.
3.
4.
5.
<root>
<div id="0_14656300_1165999404">
<input id="catalogParent12_0_13948600" type="checkbox" name="catalogParent[]" value="12" onclick="fn()" checked="1"/>
<input id="catalogParent48_0_13948600" type="checkbox" name="catalogParent[]" value="48" onclick="fn()"/>
</div>
</root>
a вот для
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<root>
<div id="0_14656300_1165999404">
<innerHTML>text1</innerHTML>
<input id="catalogParent12_0_13948600" type="checkbox" name="catalogParent[]" value="12" onclick="fn()" checked="1"/>
<innerHTML>text2</innerHTML>
<input id="catalogParent48_0_13948600" type="checkbox" name="catalogParent[]" value="48" onclick="fn()"/>
</div>
</root>
не хотеть :(
...
Рейтинг: 0 / 0
14.12.2006, 18:45
    #34201130
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
Ну так а если заменить innerHTML на label, например? У тя ж ведь все ноды парсятся в html-элементы, а тэга innerHTML нету. Можно и в твоем парсере сделать обработку, если попадется такая нода.
...
Рейтинг: 0 / 0
14.12.2006, 18:56
    #34201151
@RuSHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
SkyLightНу так а если заменить innerHTML на label, например? У тя ж ведь все ноды парсятся в html-элементы, а тэга innerHTML нету. Можно и в твоем парсере сделать обработку, если попадется такая нода.
Так там и есть проверка.. если есть id - создать элемент, нету, то расценивать как параметр...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var id              = node.childNodes[i].getAttribute('id');
if ( node.childNodes[i].firstChild ) value   = node.childNodes[i].firstChild.nodeValue || false;
if ( id != null || id == '' ) {
   if ( id && document.getElementById(id) && document.getElementById(id).tagName.toLowerCase() == tagName ) {
      var newObject = document.getElementById(id);
   } else {
      var newObject = document.createElement(tagName);
     newChild = true;
   }
...
}
т.е. пропукается через кэйс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
if (newNode)
        switch (tagName) {
                case 'innerHTML':
                                 newNode.innerHTML += value;
                                 break;
...
                case 'onchange':
                                 newNode.onchange      = function () { eval(value) };
                                 break;
                case 'onclick':
                                 //newNode.attachEvent("onclick",function(){eval(value)});
                                 newNode.onclick      = function () { eval(value) };
                                 break;
...
                default :
                                 if (newNode)newNode[tagName] = value;
        }
...
Рейтинг: 0 / 0
14.12.2006, 19:01
    #34201161
SkyLight
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой checkbox из XML-потока
Звиняйте, не заметил. Ну а всё-таки попробуй писать как Label, надежней будет. Кстати, в этом случае можно будет еще замутить так, чтоб чекбокс селектился по клику на этом лейбле, если надо.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проблема с обработкой checkbox из XML-потока / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]