Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Энтомолог
141 / 182 / 44
Регистрация: 25.04.2012
Сообщений: 2,623
Записей в блоге: 5

Не работает функция

27.07.2013, 13:09. Показов 992. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
window.onload = function ()
    {
        "use strict"
        createResultTable ("resultTable");
    }
    
function createResultTable ( id )
{
    "use strict"
    var tagsNames = {
                        table: "table",     
                        row : "tr",     
                        cell : "td"     
                    }
    
    var alphabet = ['aрыавsfd', 'bsadf', 'cdsaf', 'аавып', 'бfdsafыапва', 'бвавпва'];
    var classes = ["String", "Number1", "Number2"];
    var ids = ["0","1","2"];
    
    var rowsCount = alphabet.length;
    var cellsInRow = classes.length;
    var zero = 0;
    
    var obj = window.document;
    var byid = function (x) { return obj.getElementById (x); };
    var crel = function (x) { return obj.createElement (x); };
    
    var divContainer = byid (id);
    var table = crel (tagsNames.table);
    table.border = 1;
    
    var tr = crel (tagsNames.row);
    for(var i = zero; i < cellsInRow; i ++)
    {
        var td = crel (tagsNames.cell);
        td.innerHTML = classes [i];
        td.id = ids [i];
        td.onclick = ( function (el, container) { 
                                        return function () 
                                                            { sortResultTable ( this.id, container ); };
                                    } ) (td, divContainer);
        tr.appendChild (td);
    }
    table.appendChild(tr);
    
    for (var i = zero; i < rowsCount; i ++)
        {
            tr = crel (tagsNames.row);
            for (var j = zero; j < cellsInRow; j ++)
                {
                    td = crel (tagsNames.cell);
                    td.innerHTML = (j == zero) ? alphabet [i] : Math.random ();
                    tr.appendChild (td);
                }
            table.appendChild (tr);
        }   
    divContainer.appendChild (table);
}
 
function sortResultTable ( num, container )
    {
        "use strict"
        var trArray = container.getElementsByTagName ( "tr" );
        alert(isArray(trArray));
        var header = trArray.shift();
        alert(trArray.length);
        alert(header);
        
    }
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<title>
Title
</title>
<meta charset="UTF-8">
<script src="engine.js" type="text/javascript"></script>
</head>
<body>
<div id="resultTable"></div>
</body>
</html>


При клике по заголовку таблицы не срабатывают isArray() и shift().
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.07.2013, 13:09
Ответы с готовыми решениями:

Функция корректно работает в Delphi 7 и не неверно работает в RAD Studio 10
Переписываю свою программу с Delphi 7 под RAD Studio 10. Столкнулся с проблемой - функция в Delphi 7 возвращает правильное значение, в...

Функция cin.get(array, 80) работает в одной программе, но не работает в другой
Добрый день. Я что то совсем запутался, одна и та же функция в одной программе работает, а в другой нет. В этой программе...

Стандартная функция delete в Eclipse работает а в AndroidStudio не работает
case R.id.btnDelete: {//Кнопка удаление последнего символа ...

10
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
27.07.2013, 14:13
поинтересуюсь: зачем вы везде пишете "use strict"?
писали бы лучше "сделано новичком"

а вообще - это плохой тон
комментарии в js обозначаются // однострочный или /* многострочный */
------------

1. создавать строки и ячейки методом createElement () - это не совсем правильно
ибо для создания строк и ячеек таблицы существуют специальные методы insertRow () и insertCell ()

2. назначать тегам id, состоящий только из цифр - это совсем неправильно
дело в том, что при назначении любому тегу id в браузере автоматически создаётся глобальная переменная с этим именем, являющаяся ссылкой на этот тег
любые цифры и числа не могут быть именами переменных
не может быть именем переменной вообще никакой набор символов, начинающийся с цифры
запустите пример:
HTML5
1
2
3
4
5
6
7
8
9
<span id="myID">bla-bla</span>
<script>
alert (myID.innerHTML); // óâèäèòå bla- bla
</script>
 
<span id="123">hren-hren</span>
<script>
alert (123.innerHTML); // íè õðåíà íå óâèäèòå
</script>
отсюда: значение id может содержать латинские буквы любого регистра, арабские цифры, символ подчёркивания, но начинаться должно с буквы
--------

подсказывать вам что-либо более не буду
ибо заметил, что вы к советам не прислушиваетесь
я вам уже писал, что META-тег должен предшествовать тегу <title>
не поняли?
не согласны?
гуляйте свободно
2
 Аватар для Энтомолог
141 / 182 / 44
Регистрация: 25.04.2012
Сообщений: 2,623
Записей в блоге: 5
27.07.2013, 15:00  [ТС]
http://learn.javascript.ru/strict-mode - я в соответствии с этим пишу strict

Тэг meta сам затесался, видимо использовал старый файл и не проверил.
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,205
Записей в блоге: 24
27.07.2013, 19:15
Цитата Сообщение от kalabuni Посмотреть сообщение
дело в том, что при назначении любому тегу id в браузере автоматически создаётся глобальная переменная с этим именем, являющаяся ссылкой на этот тег
любые цифры и числа не могут быть именами переменных
Ссылку на это правило дайте, пожалуйста.

Я так рассудил: если, как Вы говорите, «создаётся глобальная переменная», она должна быть видима отовсюду, то есть является свойством глобального объекта (сама-то она быть глобальным объектом не может, ведь он единственен); просто так переменных не бывает, они всегда входят в состав некоторого объекта, видимого (как window) или невидимого (как объект переменных контекста исполнения). Я проверил, window.myID не определён. Я честно не знаю, почему Ваш код работает таким образом. Поделитесь ссылочкой или объясните основательно, если не сложно.
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head></head>
<body>
<div id="myID">bla-bla</div>
<script type="text/javascript">
try {
alert (window.myID.innerHTML);
} catch(e){ alert("error"); }
alert(window.Math.sin(1));
</script>
</body>
</html>
0
 Аватар для koza4ok
632 / 440 / 67
Регистрация: 19.09.2012
Сообщений: 1,632
28.07.2013, 01:21
Mysterious Light Это действительно так.Просто не все браузеры это делают.
Есть абзац на javascript.ru ,но найти его сейчас не удалось
Вот что удалось найти на другом сервисе:

http://stackoverflow.com/quest... 6#10447586

http://stackoverflow.com/quest... ables-here
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
28.07.2013, 02:04
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Я проверил, window.myID не определён.
хм...
JavaScript
1
2
3
4
5
6
alert (typeof (window.myID)); // пишет object
// и пишет это в Opera 12.16,
//             в Chrome 28.0.1500.72 m,
//             в FireFox 22.0,
//             в MSIE 8.0,
//             в Safari 5.7.1
Цитата Сообщение от koza4ok Посмотреть сообщение
Просто не все браузеры это делают.
а какие именно не делают?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,205
Записей в блоге: 24
28.07.2013, 16:06
kalabuni, да, я поторопился, проверив только в Firefox 3.6
даже Opera 9.6 поддерживает

Вобщем, если все элементы дублируются в window, то из аргументов против численного именования остаются только «плохой тон, плохая практика, это банально неудобно», потому как к свойству по численному имени мы обращаться умеем:
JavaScript
1
2
3
4
5
6
7
alert(window[123].innerHTML);
// <div id="123">bla-bla</div>
 
alert(window.myID.innerHTML);
alert(myID.innerHTML); // как краткая форма
alert(window["myID"].innerHTML); // как альтернатива
// <div id="myID">bla-bla</div>
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
28.07.2013, 22:36
вы, походу, опять поторопились
JavaScript
1
2
3
4
5
6
alert (typeof (window ['123'])); // ïèøåò undefined
// è ïèøåò ýòî â Opera 12.16,
//             â Chrome 28.0.1500.72 m,
//             â FireFox 22.0,
//             â MSIE 8.0
// !!!!!!!!!!! и только в Safari 5.7.1 пишет object
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,205
Записей в блоге: 24
29.07.2013, 00:31
Всё, отныне я вообще в этой теме молчу.
Проверил только в Midori 0.2.4 (GTK+ 2.21.2, WebKitGTK+ 1.2.1) — там window[123] возвращает объект.

Не по теме:

Честно говоря, у меня всего три браузера есть: Midori 0.2.4, Opera 9.60 и Firefox 3.6.10


Почему существуют какие-то интерпретаторы JS, которые ведут себя таким образом, что существует хотя бы одно глобальное имя, которое не является свойством глобального объекта window, — для меня вообще загадка!
Как же это так, что "myID" — свойство, а "123" — нет; ведь принципиальной разницы нет никакой (по крайней мере, в документации я не встречал никаких оговорок о "числовых" и "нечисловых" именах).

Ладно-ладно, буду считать, что это такая всеобщая договорённость, что в глобальном контексте есть имена переменных, соотв. "допустимым" id DOM-елементов, и такие id также дублируются как свойства window, другие же id вообще не порождают ни имена (что очевидно), ни свойств window (что мне не очевидно); притом от браузера к браузеру это правило может меняться. Мне не нравится, что 1) у всех (точнее, у некоторых) всё по-разному и 2) это никак не согласуется (или согласуется, но очень хитрым образом) с написанным в документации, но ведь никого же не интересует, что мне там не нравится, поэтому больше ныть не буду. Спасибо, kalabuni, что поправляете меня.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
29.07.2013, 08:05
Цитата Сообщение от Mysterious Light Посмотреть сообщение
по крайней мере, в документации я не встречал никаких оговорок о "числовых" и "нечисловых" именах
встречайте - http://msdn.microsoft.com/en-u... 94%29.aspx

в разделе "Naming variables" написано:
The first character must be an ASCII letter (either uppercase or lowercase), or an underscore (_) character. Note that a number cannot be used as the first character. Subsequent characters must be letters, numbers, or underscores (_).
в документации для Mozilla - https://developer.mozilla.org/... d_literals - тоже однозначно прописано:
A JavaScript identifier must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9).
если цифра не может быть первым символом имени переменной, то однозначно получается, что "числовых" имён переменных быть не должно

таким образом, если бы браузеры не создавали из значений id тегов имена переменных,
то значение id могло бы быть и числовым
но раз создают, то, следовательно, правила именования javascript-переменных должны распространяться и на значения id тегов
------

кстати, первый цифровой символ в значении id не приемлет и CSS
т.е. если назначить <div id="123abc">bla-bla</div>
и в стилевом блоке прописать правило #123abc {color: red},
то цвет текста bla-bla не будет красным ни в одном из известных мне браузеров

также отмечу, что допустимое в javascript'e нахождение первым символом знака подчёркивания, вызывает проблемы в CSS в некоторых браузерах (в том числе и в любимом многими MSIE)
т.е. если назначить <div id="_myDiv">bla-bla</div>
и в стилевом блоке прописать правило #_myDiv {color: red},
то текст bla-bla также не будет отображаться красным цветом

полагаю, что всего этого вполне достаточно, чтобы однозначно утверждать: значения id должны начинаться с латинской буквы любого регистра
1
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,531
29.07.2013, 08:25
Самое поганое в этой ситуации то, что вот этот код работает во всех браузерах. И как объяснить это ни кто не знает.
JavaScript
1
2
var el=document.getElementById("123");
el.style.color="red";
HTML5
1
<div id="123">text</div>
Для себя давно сделал простой вывод, если написано нельзя, но немножко можно, то лучше даже не вспоминать о том, что где то как то можно, меньше проблем будет, и придерживаюсь этого правила без всяких исключений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2013, 08:25
Помогаю со студенческими работами здесь

В VS 2015 не работает рекурсивная функция, которая работает в C++Builder
Добрый день! Перенес блок кода из старого учебного проекта под C++Builder, который там всегда стабильно работал, на VS 2015. Одна из...

Как функция работает,в обработчике не работает
В таком виде все прекрасно работает (function ($) { $.fn.percent = function (el, arg2) { ...

Функция MapAndLoad() работает с dll-файлом, не работает с exe-файлом
Доброго времени суток. Объясните, почему программа #include &lt;windows.h&gt; #include &lt;imagehlp.h&gt; #include &lt;stdio.h&gt; int main(int...

Не работает функция
Здравствуйте! #pragma endregion int time_count0, time_count1, time_count2, time_count3, time_count4; // счетчики для времени ...

Функция не работает
тело функции void Ed(){ TLabel *ee = new TLabel(MainForm); ee-&gt;Caption=&quot;wwwwwww&quot;; ee-&gt;Left=100; ee-&gt;Top=200; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru