powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проблема с обработкой checkbox из XML-потока
21 сообщений из 21, страница 1 из 1
Проблема с обработкой checkbox из XML-потока
    #34195983
@RuSHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть функция, которая обрабатывает тело 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
Проблема с обработкой checkbox из XML-потока
    #34199831
@RuSHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, очень серьёзно встала проблема с этими чекбоксами... ЗП могут урезать...
Сделал обходной путь (в XML-потоке сначало указываю на создание cheackbox, а потом в нём же прописываю javascript, который этот cheackbox отмечает и запихивает в его параметр value данные, а к событию onClick подсовывает нужный javascrip), но етот обход не устраивает начальство :(
________________________
Спроси, может отвечу ;)
icq 111718060
...
Рейтинг: 0 / 0
Проблема с обработкой checkbox из XML-потока
    #34199995
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. клик отрабатывается только на чеках, которые не отмечены, я правильно понял?

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

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

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

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

2 @RuSHA:
А вот в там, где у тебя идет финальное добавление объекта к странице obj.appendChild(newObject);, посмотри-ка, какой HTML-код содержится в newObject.
...
Рейтинг: 0 / 0
Проблема с обработкой checkbox из XML-потока
    #34200439
@RuSHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблема с обработкой checkbox из XML-потока
    #34200533
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришла тут в голову идея вот только не знаю, прокатит или нет. Я смотю, ты парсишь полученный XML, а потом на остове его создаешь html-элементы, правильно? А что если из xml-потока просто вытащить ветку div и без лишних манипуляций через appendChild прикинуть её куда надо?
...
Рейтинг: 0 / 0
Проблема с обработкой checkbox из XML-потока
    #34200538
@RuSHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблема с обработкой checkbox из XML-потока
    #34200595
@RuSHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SkyLightПришла тут в голову идея вот только не знаю, прокатит или нет. Я смотю, ты парсишь полученный XML, а потом на остове его создаешь html-элементы, правильно? А что если из xml-потока просто вытащить ветку div и без лишних манипуляций через appendChild прикинуть её куда надо?

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

Код: 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
Проблема с обработкой checkbox из XML-потока
    #34200749
@RuSHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблема с обработкой checkbox из XML-потока
    #34200906
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот это должно сработать:

Код: 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
Проблема с обработкой checkbox из XML-потока
    #34201120
@RuSHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблема с обработкой checkbox из XML-потока
    #34201130
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так а если заменить innerHTML на label, например? У тя ж ведь все ноды парсятся в html-элементы, а тэга innerHTML нету. Можно и в твоем парсере сделать обработку, если попадется такая нода.
...
Рейтинг: 0 / 0
Проблема с обработкой checkbox из XML-потока
    #34201151
@RuSHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблема с обработкой checkbox из XML-потока
    #34201161
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Звиняйте, не заметил. Ну а всё-таки попробуй писать как Label, надежней будет. Кстати, в этом случае можно будет еще замутить так, чтоб чекбокс селектился по клику на этом лейбле, если надо.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проблема с обработкой checkbox из XML-потока
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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