Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка при составлении цикла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Извлечение данных из xml-файла
Ammiak
Отправлено: 29 Апреля, 2012 - 20:48:14
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




почему при запуске такого цикла:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $('button).click(function(e) {
  3. e.preventDefault();
  4. for (i=1; i<=3; i++) {
  5. $('div').html('<input type="radio" />');
  6. }
  7. });
  8.  

Выводится только одна радиокнопка вместо трех?

(Отредактировано автором: 30 Апреля, 2012 - 12:06:51)

 
 Top
EuGen Администратор
Отправлено: 29 Апреля, 2012 - 22:37:37
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Потому что Вы каждую итерацию цикла перезаписываете свойство, вместо того, чтобы дописывать к нему значение.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DelphinPRO
Отправлено: 29 Апреля, 2012 - 22:42:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




замените .html() на .append()
но лучше в плане производительности, сначала в цикле формировать строку для вставки, а потом целиком ее вставлять


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Ammiak
Отправлено: 30 Апреля, 2012 - 11:54:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




EuGen, DelphinPRO
но если юзать append то при след. нажатии на button радиокнопок будет 6, при след.-9 и т.д.
(Добавление)
ситуация такова: в xml-файле есть такие теги:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <answer>Ответ 1</answer>
  3. <answer>Ответ 2</answer>
  4. <answer>Ответ 3</answer>
  5.  

Нужно вытащить текст из тегов и оформить с радиокнопками в таком виде:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <input type="radio">Ответ 1
  3. <input type="radio">Ответ 2
  4. <input type="radio">Ответ 3
  5.  

Делаю таким образом:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var count=$(XMLdata).find("answer").length;  /*считаем количество нужных узлов, их 3*/
  3. for (i=1; i<=count; i++) {        
  4. var my_text=$(XMLdata).find("answer").text();  /*извлекаем из них текст*/
  5. $('div').html('<input type="radio" />'+my_text+''); /*выводим в цикле текст с радиокнопками*/
  6. }
  7.  

Но в результате выводится одна радиокнопка с текстом "Ответ 1Ответ 2Ответ 3Ответ 4"
Подскажите пожалуйста, как нужно исправить код

(Отредактировано автором: 30 Апреля, 2012 - 12:10:18)

 
 Top
ugin_root
Отправлено: 30 Апреля, 2012 - 12:26:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. var selector = 'div'; /*вытащил селектор что-бы было понятней*/
  2. var radios = ''; /*кладём все кнопки сначала в эту строку а не напрямую в ДОМ*/
  3.  
  4. //Отчищаем элемент в котором будут лежать кнопки
  5. $(selector).empty();
  6.  
  7. //Выполняем функцию для каждого элемента из набора (вместо вашего цикла)
  8. $(XMLdata).find("answer").each(function(){
  9.         //Текст текущего элемента
  10.         var text = $(this).text();
  11.         radios += '<input type="radio"/>' + $(this).text();
  12. });
  13.  
  14. //Добавляем кнопки на страницу
  15. $(selector).append(radios);


CODE (javascript):
скопировать код в буфер обмена
  1. //Если цикл это принципиально то получать текст нужно с помощью метода .eq(i)
  2.  
  3. var count = $(XMLdata).find("answer").length; /*считаем количество узлов*/
  4. var radios = ''; /*кладём все кнопки сначала в эту строку а не напрямую в ДОМ*/
  5.  
  6. $('div').empty();
  7. for (i=1; i<=count; i++) {
  8.         //извлекаем из них текст ( метод .eq() возвращает указанный элемент)
  9.         var my_text=$(XMLdata).find("answer").eq(i).text();
  10.        
  11.         radios += '<input type="radio"/>' + my_text;
  12. }
  13. $('div').append(radios);

(Отредактировано автором: 30 Апреля, 2012 - 12:37:40)

 
 Top
Ammiak
Отправлено: 30 Апреля, 2012 - 13:05:02
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




ugin_root, большое спасибо, всё работает +1
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB