Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.08.2012, 22:27
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Стирается массив при выходе из each
Всем приветы! Прошу помочь ...
<?xml version="1.0" encoding="utf-8"?>
<root date="28.08.12">
  <mdata date="29.08.12">
    <bye>
      <b1>1.10</b1>
      <b2>1.20</b2>
      <b3>1.30</b3>
      <b4>1.40</b4>
      <b5>1.55</b5>
    </bye>
    <sell>
      <s1>0.00</s1>
      <s2>0.00</s2>
      <s3>0.00</s3>
      <s4>0.00</s4>
      <s5>0.00</s5>
    </sell>
  </mdata>
  <mdata date="30.08.12">
    <bye> ...

function getRate( ratedate, bs )
{
	var i, vname, sss;
	var rates = new Array();

	var md = $("mdata", xml);

	$.each(md, function() {
		var m_date = jQuery( this ).attr( 'date' );
		if ( m_date == ratedate )
		{
			for ( i = 1; i < 6; i++ )
			{
				vname = bs + i;
				rates[vname] = jQuery( this ).find( vname ).text();
				sss += jQuery( this ).find( vname ).text() + ' + ';
			}
			return false;
		}
	});

	alert('ratesAll: ' + rates);
	alert('sss: ' + sss);
	return rates;
}

Вызываю, к примеру так:
getRate( '29.08.12', 'b' );

На выходе из each массив rates оказывается пустой - alert('ratesAll: ' + rates) выводит пустоту! Переменная же sss - нормально сохраняет значение.
Внутри each массив rates нормально заполняется.
В чем ошибка? Бьюсь уже несколько часов - ничего не получается
Спасибо всем кто откликнется
Ответить с цитированием
  #2 (permalink)  
Старый 29.08.2012, 22:29
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

замените:
var rates = new Array();
на вот это:
var rates = {};
так как массив может содержать только числовые ключи, а вы пытаетесь сохранить именованные.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2012, 22:31
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

либо замените это:
rates[vname] = jQuery( this ).find( vname ).text();
на это:
rates[ rates.length ] = jQuery( this ).find( vname ).text();
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 29.08.2012, 22:48
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Я понял, спасибо. Меня сбил PHP! В JS отсутствуют ассоциативные массивы
Ответить с цитированием
  #5 (permalink)  
Старый 29.08.2012, 22:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<?xml version="1.0" encoding="utf-8"?>
<root date="28.08.12">
  <mdata date="29.08.12">
    <bye>
      <b1>1.10</b1>
      <b2>1.20</b2>
      <b3>1.30</b3>
      <b4>1.40</b4>
      <b5>1.55</b5>
    </bye>
    <sell>
      <s1>0.00</s1>
      <s2>0.00</s2>
      <s3>0.00</s3>
      <s4>0.00</s4>
      <s5>0.00</s5>
    </sell>
  </mdata>
  <mdata date="30.08.12">
    <bye> ...



<script type="text/javascript">


function getRate( ratedate, bs )
{
	var i, vname, sss;
	var rates = [];

	var md = $("mdata");
	$.each(md, function() {
		var m_date = jQuery( this ).attr( 'date' );
		if ( m_date == ratedate )
		{
			for ( i = 1; i < 6; i++ )
			{
				vname = bs + i;
				rates[i]=jQuery( this ).find( vname ).text();
				sss += jQuery( this ).find( vname ).text() + ' + ';
			}
			return false;
		}
	});

	//alert('ratesAll: ' + rates);
	alert('sss: ' + sss);
           return rates;
}

alert('ratesAll: ' + getRate( '29.08.12', 'b' ));
</script>

Последний раз редактировалось Deff, 29.08.2012 в 23:15.
Ответить с цитированием
  #6 (permalink)  
Старый 29.08.2012, 22:58
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Deff
вы её не вынесли и не возвращали
как это не вынес? вынес же, строка 4 и возвращает о ее на строке 24
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #7 (permalink)  
Старый 29.08.2012, 23:13
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от devote
как это не вынес? вынес же, строка 4 и возвращает о ее на строке 24
Поправил скрипт - *мну думал - что он ждет и саму переменную на выходе, за функцией
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
Совершение действия при удерживании клавиши BorodinKO Общие вопросы Javascript 3 26.06.2011 00:59
При достижении низа страницы prokopoffmusic jQuery 0 21.06.2011 04:52
Как выполнить код javascript при инклюде странички на php wfire jQuery 7 27.05.2011 14:43
Не отрабатывает событие onmouseout при внедрении нового слоя ilshat Элементы интерфейса 3 28.07.2008 06:27