Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с Dojo Toolkit, помогите решить, применение Dojo в Ajax 
V
    Опции темы
kvovan
Дата 28.3.2007, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Проблема с Dojo, не работает в IE.

Есть такая функция, которая динамически добавляет два элемента checkbox перед другим элементом....

Код

function addCheckBox(message) 
{        
                var node = message.source;

                var checkBox = document.createElement('input');
                checkBox.setAttribute('id', "content_"+node.widgetId);
                checkBox.setAttribute('type', 'checkbox');
                checkBox.setAttribute('align', "center");
                checkBox.setAttribute('name', "content_");
                checkBox.setAttribute("onClick","clickCheckBox(this,'"+node.widgetId+"')");

                dojo.dom.insertBefore(checkBox, node.titleNode);


                checkBox = document.createElement('input');
                checkBox.setAttribute('id', "template_"+node.widgetId);
                checkBox.setAttribute('type', 'checkbox');
                checkBox.setAttribute('align', "center");
                checkBox.setAttribute('name', "template_");
                checkBox.setAttribute("onClick","clickCheckBox(this,'"+node.widgetId+"')");
                dojo.dom.insertBefore(checkBox, node.titleNode);
}


Особенно хочется выделить вто этот фрагмент:
Код

 checkBox.setAttribute("onClick","clickCheckBox(this,'"+node.widgetId+"')");

Он добавляет обработчик при щелчке по флажку, вызывает функцию clickCheckBox, так вот эта функция
нормально вызывается в Mozilla и Opera , но не в какую не работает в IE.
Ничего не пойму, плиз, люди кто сталкивался с Dojo помогите.
PM MAIL   Вверх
AKS
Дата 28.3.2007, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(kvovan @  28.3.2007,  06:02 Найти цитируемый пост)
нормально вызывается в Mozilla и Opera , но не в какую не работает в IE.

Не работает, потому что для IE в метод setAttribute вторым параметром (в случае, если нужен обработчик) должна быть передана функция, а не строка. И Dojo тут не виновато. ;)


Это сообщение отредактировал(а) AKS - 28.3.2007, 07:44
PM MAIL   Вверх
kvovan
Дата 28.3.2007, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Спасибо за ответ.
сейчас заменил код:
Код

checkBox.setAttribute("onClick",clickCheckBox(checkBox,node.widgetId));


а вот сама функция clickCheckBox

Код

function clickCheckBox(check,id)
{

 var node=dojo.widget.byId(id); 
 var obj;
 var type=check.name;
 alert(node.children);
 if(node.children.length !=0) setChildrenCheck(check.checked,node.children,type,0);
}


Все вроде нормально, но теперь когда устанавливается атрибут onClick, автоматом почемуто вызывает функцию clickCheckBox, которая должна
была вызываться только по onClick на флажке.
Опишу немного по подробнее в чем состоит сам замысел:
строится дерево переключателей, если я нажал на родительский переключатель соответственно дочерниии должны включиться тоже, для этого и нужно функция clickCheckBox, которая обрабатывает нажатие переключателей. Так вот теперь когда ф-я автоматом вызывается это дерево вообще не строится. 
Динамическое добавление переключателей я вызываю с помощью:
Код

dojo.event.topic.subscribe("tree/createDOMNode", addCheckBox);

PM MAIL   Вверх
AKS
Дата 28.3.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(kvovan @  28.3.2007,  08:26 Найти цитируемый пост)
автоматом почемуто вызывает функцию clickCheckBox,

Не "почему-то", а потому, что это Вы ее вызвали! Надо как-нибудь так:
Код

var param = 'clickCheckBox(this, ' + node.widgetId + ')';
if (window.execScript) {
    param = new Function(param); // если IE - то создается функция
}
checkBox.setAttribute('onclick', param);

PM MAIL   Вверх
kvovan
Дата 28.3.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



 smile  smile 
Огромное спасибо, я тут уже не знаю на что грешить толи на IE то ли на Dojo, оказывается сам виноват, я просто совсем недавно взялся за JavaScript и технологию Ajax. Еще раз спасибо, заработало.

Но это не все, я думаю пока что тему не буду закрывать, потомучто может опять сам чего не так делаю, проблема c dojo.io.bind и опять как обычно в Mozille и Opere работает, а вот в IE ни как не хочет общаться с сервером.
Привожу исходный код:

Код

//нажатие на кнопку 
function sendProcess()
{
 //подготовка отправляемых данных
//..........
//.........

 dojo.io.bind(
 {
   url: "http://slon.cf1.ru/adm/access/?sys=access_group_adm_add",
   handler: fromServer,
   content: {
             type:"dojo",
             name:name,
             description:description,
             factive:factive,
             access:arr
            },
   mimetype: "text/plain"
 });
}

function fromServer(type, result, evt)
{
  if (type == 'error')
    alert('Ошибка получения данных с сервера!');
  else
  {
   var response = eval('(' + result + ')');

   if(response.message != null) alert(response.message);
   if(response.error != null ) alert(response.error);
   if(response.group_id != null) group_id=response.group_id;
   if(group_id != null) dlgProg.show();
  }
}


так вот, после нажатия кнопки сохранить в IE он мне аж два раза выдает: alert('Ошибка получения данных с сервера!');
Пожалуйста посмотри че не так или опять я че то не то сделал! smile 
PM MAIL   Вверх
kvovan
Дата 2.4.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Короче я понял в чем беда зключалась
Код

dojo.io.bind(
 {
   url: "http://slon.cf1.ru/adm/access/?sys=access_group_adm_add",
   handler: fromServer,
   content: {
             type:"dojo",
             name:name,
             description:description,
             factive:factive,
             access:arr
            },
   mimetype: "text/plain"
 });


вот здесь где в контенте передаю массив arr, именно он не передается, arr это массив преобразованный в json строку, если сделать вот так:

Код

 dojo.io.bind(
 {
   url: url,
   //handler: fromServer,
   handler: fromServer,
   content: {
             type:"dojo",
             name:name,
             description:description,
             factive:factive
//             arr:arr
            },
   mimetype: "text/plain"
 });

то все отлично работает, отсюда вывод: получается в IE нельзя передавать слишком большую строку , использую метод GET. Вообще ерунда какая-то, нашел в чем заключается проблема, но легче нисколько не стало smile 
PM MAIL   Вверх
SelenIT
Дата 2.4.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(kvovan @  2.4.2007,  11:52 Найти цитируемый пост)
в IE нельзя передавать слишком большую строку , использую метод GET

Максимальная длина URL в Internet Explorer'е - 2083 символа. А у Мозиллы и Оперы - что-то в районе 4 кБ или даже больше.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
kvovan
Дата 9.4.2007, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Ага,  спасибо, я уже понял, что нужно использовать POST.
PM MAIL   Вверх
dXdYdZ
Дата 16.4.2007, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 16.4.2007

Репутация: 3
Всего: 4



Для подключения события к узлу существует стандартная функция dojo.event.connect. Начальную информацию о Dojo Toolkit смотрите на dojo описание ajax dojo.dom введение javascript
PM MAIL   Вверх
superVad
Дата 18.4.2007, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: нет
Всего: 15



Вот прочитал этот пост и понял почему у меня гдето месяц назад не заладилось с dojo (тоже самое не хотел bind работать в ие), но время прошло и я освоил gwt и не жалею  smile 
PM MAIL   Вверх
kvovan
Дата 18.4.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



Плиз! Напиши поподробнее про gwt что такое с чем едят... если можно ссылочки дай.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1272 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.