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

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

27.07.2013, 13:09. Показов 980. Ответов 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,204
Записей в блоге: 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,204
Записей в блоге: 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,204
Записей в блоге: 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,529
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru