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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл по хэш-массиву, не работает в IE7 
:(
    Опции темы
check
Дата 20.8.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня есть хэш который нужно определенным образом отфильтровать
Код

var plans = {
1446: 'И-311',
1448: 'И-411',
1453: 'И-511',
1457: 'И-611',
1460: 'П-712'
}


Написал функцию которая фильтрует хэш по ключу
Код

function HashFilter(x) {  
groups = new Array();
i = 0;
for (var key in plans) {   
  if (key == x) {
    groups[i] = plans[key];
    i++;
  }
}  
/*
дальше какие-то действия с массивом groups
*/

и столкнулся с вышеназванной проблемой.
В ИЕ7 функция не работает, а конкретно не работает цикл for (var key in plans) 
Почему так и что можно сделать?

Добавлено через 13 минут и 30 секунд
При это ие7 зараза ещё никаких ошибок не выдает.  Для него есть какой-нибудь плагин для отладка JavaScript? Internet Explorer Developer Toolbar это не оно?
PM MAIL   Вверх
dXdYdZ
Дата 20.8.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вместо функции HashFilter(x) можно написать plans[x]. Ведь всё равно 2 одинаковых ключа не допустимо.
PM MAIL   Вверх
check
Дата 20.8.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dXdYdZ @  20.8.2007,  12:02 Найти цитируемый пост)
Ведь всё равно 2 одинаковых ключа не допустимо
Об этом я не подумал,  тогда наверное мне хэш вообще не подойдёт.

PM MAIL   Вверх
Zeroglif
Дата 20.8.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



IE7 под рукой нет, но нужна ли вообще такая функция, зачем собирать что-то в массив (groups), если свойство всё-равно живёт в одном экземпляре, и есть ли необходимость сравнивать каждое свойство (key) исходного объекта (plans) с некой строкой (x) если можно просто один раз проверить наличие такого свойства в объекте if (x in plans)?
PM MAIL WWW   Вверх
check
Дата 20.8.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да-да,   извините ступил. Тут хэши вообще не причём. 
Думаю, нужно создать два "параллельных" массива и фильтровать "правый" массив по значениям "левого".
Дело в том, что то, что я пытался представить в виде ключей хэша - не набор уникальных значений,  эти значения могут повторяться.
PM MAIL   Вверх
check
Дата 20.8.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Оффтоп получается, но наверное создавать новую тему смысла нет
Код

plans = new Array();
plans[0]='И-311';
plans[1]='И-411';
plans[2]='И-511';
plans[3]='И-611';
plans[4]='П-312';
plans[5]='П-412';
plans[6]='П-512';
plans[7]='П-612';
plans[8]='И-017';
plans[9]='И-211';
plans[10]='И-311';

ReleaseID = new Array();
ReleaseID[0]=1446;
ReleaseID[1]=1448;
ReleaseID[2]=1453;
ReleaseID[3]=1457;
ReleaseID[4]=1447;
ReleaseID[5]=1449;
ReleaseID[6]=1454;
ReleaseID[7]=1458;
ReleaseID[8]=41;
ReleaseID[9]=603;
ReleaseID[10]=603;


function ArrayFilter(x) {  
    var groups = new Array();   
    for (var i=0; i < ReleaseID.length; i++) {  
        if (ReleaseID[i] == x) {
            groups[i] = plans[i];
        }
    }   
    document.getElementById('groups').innerHTML = ""; 
    for (var j=0; j < groups.length; j++) {  
        group = new String(groups[j]);  
        if (group != 'undefined') 
            document.getElementById('groups').innerHTML += "<tr bgcolor='#FFFFFF'><td width='3%'>&nbsp;</td><td width='3%'>&nbsp;</td><td>"  + group + "</td></tr>";
    }  
}

Вот этот код опять-таки отказывается работать в IE,  в FF работает нормально.
Ошибку вызывает любая попытка присвоить что-либо document.getElementById('groups').innerHTML.
С document.getElementById('groups') всё в порядке,  возвращает объект.
id="groups" присвоен пустой таблице
Код

<table border="1" width="100%" id="groups">

</table>


При этом IE обнаруживает в document.getElementById('groups').innerHTML теги <TBODY></TBODY>.
Ладно,  это его право,  но я на всякий случай делаю так
Код

function ArrayFilter(x) {  
    var groups = new Array();   
    for (var i=0; i < ReleaseID.length; i++) {  
        if (ReleaseID[i] == x) {
            groups[i] = plans[i];
        }  
    }    
    row = "";
    document.getElementById('groups').innerHTML = "";
    rowString = new String(row);
    for (var j=0; j < groups.length; j++) {  
        var group = new String(groups[j]);  
        if (group != 'undefined') {
            row = rowString.replace('<TBODY></TBODY>', '');
            row += "<tr bgcolor='#FFFFFF'><td width='3%'>&nbsp;</td><td width='3%'>&nbsp;</td><td>"  + group + "</td></tr>"; 
        }
    }  
    document.getElementById('groups').innerHTML = row;
}

По прежнему в FF все работает,  а в IE все обламывается при первой же попытки записать что-то своё в innerHTML.

Ну есть ещё конечно DOM,  но хотелось бы обойтись innerHTML.
PM MAIL   Вверх
Zeroglif
Дата 20.8.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Опытный
**


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

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



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


 




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


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

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