Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > скрипт не работает в хроме (IE и Opera) работает


Автор: slang 21.2.2009, 11:17
Код

        function copy_kol()
        {
            var el = document.getElementsByTagName('input');
            var elen = el.length;
            var tid;
            for(var i = 0; i < elen; i++) {
                
                if(!el[i].name) continue;
                tid = el[i].name;
                if(tid.slice(0,6) != 'Kolvo_') continue;
                kol = el[i].value * 1
                sp = document.getElementsByTagName('input');
                sp('KolvoFact_'+tid.slice(6)).value=kol;
            }
            ras_it();
        }

в IE и Opera скрипт работает корректно, а в Chrome не пашет :(
В Хроме -> Разработчикам -> Консоль JavaScript пишет ошибку:
Uncaught TypeError: object is not a function native runtime.js (line 177)
В Хроме -> Разработчикам -> Отладка JavaScript:
uncaught exception TypeError: object is not a function

ХЗ, чего ему надо :(

Автор: bars80080 21.2.2009, 11:54
указал бы строчку что ли...

меня лично вот это настораживает:

                sp = document.getElementsByTagName('input');
                sp('KolvoFact_'+tid.slice(6)).value=kol;

откуда у идентификатора массива элементов вдруг появляются круглые скобки. я так понимаю - должны быть квадратные для выбора элемента. т.е. sp['KolvoFact_'+tid.slice(6)] и то, я не думал что он даёт ассоциативный массив, вроде должно быть порядковое значение

Автор: slang 21.2.2009, 15:47
bars80080
если написать так:
Код

        function copy_kol()
        {
            var el = document.getElementsByTagName('input');
            var elen = el.length;
            var tid;
            for(var i = 0; i < elen; i++) {
                
                if(!el[i].name) continue;
                tid = el[i].name;
                if(tid.slice(0,6) != 'Kolvo_') continue;
                kol = el[i].value * 1
                sp = document.getElementsByTagName('input');
alert (sp['KolvoFact_'+tid.slice(6)]);
                sp('KolvoFact_'+tid.slice(6)).value=kol;
            }
            ras_it();
        }


то в chrome получаю результат: udefined, а в Opera получаю: [object HTMLInputElement]

Автор: bars80080 22.2.2009, 02:28
почему в хроме неизвестность не знаю, но в опере всё правильно - указатель на объект, у которого могут быть такие свойства как .value


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

Автор: slang 22.2.2009, 08:38
Цитата(bars80080 @  22.2.2009,  02:28 Найти цитируемый пост)
кстати, очень не верно брать указатель каждый раз при прокрутке цикла

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


Цитата(bars80080 @  22.2.2009,  02:28 Найти цитируемый пост)
почему в хроме неизвестность не знаю, но в опере всё правильно

ну значит так и оставляю ... мозгов написать иначе все равно не хватит smile

Автор: bars80080 22.2.2009, 21:50
ну, ещё какое-то соображение. может в хроме нельзя запихивать выражения в [ ... ]. попробуйте запихать 'KolvoFact_'+tid.slice(6) в переменную. во-вторых посмотрите, есть ли в tid что-нибудь перед вставкой.


п.с. из-за малого использования, под хром не правлю

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)