Ru-Board.club
← Вернуться в раздел «Web-программирование»

» вопросы по javascript

Автор: unreal666
Дата сообщения: 14.11.2012 09:16
Посмотрел тут кусок кода скрипта useragents.js с сайта html5test.com.
Там есть такое

Цитата:
var UserAgents = (function(){
...
var Detected = function() { this.initialize.apply(this, arguments) };
    Detected.prototype = {
        initialize: function(ua, options) {
...
        }
    }
...
    return Detected;
})();

Чего-то не понял, чем "this.initialize.apply(this, arguments)" в данном случае отличался бы от просто "this.initialize(arguments)" ?

Добавлено:
PS.
Или это сделано только для того, чтобы передать в initialize сразу пачку аргументов ?
Автор: Cheery
Дата сообщения: 14.11.2012 09:40
unreal666

Цитата:
в данном случае отличался бы от просто

в данном случае ua = arguments[0], а options = arguments[1];
чего не было бы в вашем варианте.
Автор: unreal666
Дата сообщения: 20.11.2012 11:40
можно ли с помощью JS определить, поддерживает ли объект document событие DOMContentLoaded ?
Автор: unreal666
Дата сообщения: 28.11.2012 17:32
Есть таблица размерностью 12 столбцов x 135 строк.
Нужно повесить обработчик(и) на каждую ячейку первых 6-ти столбцов и при наведении мышки на эти ячейки выводить соответствующую фигню (для каждой ячейки свою). Каждая строка имеют свой тег ID.

Вопрос: что для браузера будет выполняться легче:
- повесить на каждую нужную ячейку события onmouseover/onmouseout
- повесить единственный "прослушивальщик" на таблицу, а при срабатывании событий (только непонятно какого события) определять координаты ячейки (ID строки, номер столбца) и реагировать соответственно.
Автор: Cheery
Дата сообщения: 28.11.2012 19:46
unreal666

Цитата:
повесить единственный "прослушивальщик" на таблицу, а при срабатывании событий (только непонятно какого события) определять координаты ячейки (ID строки, номер столбца) и реагировать соответственно.

конечно лучше..

помнится где то даже спрашивали, в чем проблема, когда на большую таблицу навешали обработчиков на каждую ячейку, что вызывало переполнение стека вызовов в браузере.
Автор: NORIO
Дата сообщения: 15.12.2012 01:30
В результатах поиска по картинкам в гуле при прокручивании страницы картинки догружаются,
мне надо выполнять скрипт каждый раз при этой подгрузке.

Как отследить это событие?
Автор: Cheery
Дата сообщения: 15.12.2012 01:41
NORIO

Цитата:
Как отследить это событие?

выводится где? на вашей странице или же на странице гугла?
Автор: NORIO
Дата сообщения: 15.12.2012 03:40
Cheery
на странице гугла

изучаю javascript
хочу сделать юзер скрипт для опера или greasemonkey
чтобы он удалял из результатов поиска все картинки с указанных доменов.
Автор: DarkSmoke
Дата сообщения: 20.12.2012 19:34
Добрый день
Нужно разукрасить четные li другим цветом

Код: <div id="menu">
    <ul>
        <li><a href="#">ДЕТИ</a></li>
        <li><a href="#">АРТИСТЫ</a></li>
        <li><a href="#">ПОРТРЕТ</a></li>
        <li><a href="#">СВАДЬБА</a></li>
        <li><a href="#">РАЗНОЕ</a></li>
    </ul>
</div>
Автор: Cheery
Дата сообщения: 20.12.2012 20:02
DarkSmoke

Цитата:
jQuery не предлагать.

ну.. в наше время писать на native js, учитывая насколько просто можно написать в jQuery, не всегда удобно
через css3 не хотите?
Автор: DarkSmoke
Дата сообщения: 20.12.2012 20:46

Цитата:
через css3 не хотите?

не кросбраузерно
а jquery грузить на сайт из четырех страниц, кажется нерациональным использованием ресурсов.
Автор: Cheery
Дата сообщения: 20.12.2012 21:12
DarkSmoke
var els = document.getElementById('menu').getElementsByTagName('li');
for(var i = 0; i < els.length; i++)
if (i%2) els[i].className = 'имя класса';
Автор: DarkSmoke
Дата сообщения: 20.12.2012 21:41
не работает ((
Не меняет цвет текса и фона

Код:
.even {color: red !important; background: #343434 !important;}
Автор: Cheery
Дата сообщения: 20.12.2012 21:51
DarkSmoke

Цитата:
Не меняет цвет текса и фона

http://jsfiddle.net/y7BGn/
разберитесь с css для себя - color это цвет текста, а не ссылки

ps: ну и скрипт должен быть запущен тогда, когда уже есть элементы на странице.
Автор: MoLnuS
Дата сообщения: 14.02.2013 15:28
Прошу в помощи в задании по JS.

Последовательно вводятся 4 значения. Необходимо, чтобы после ввода, значения были сформированы в нумерованный список, маркированный список, в таблицу 2х2, а затем все эти списки и таблицы должны быть выведены в HTML.

К сожалению, сейчас нет дословного задания. Но мне достаточно лишь показать как же введенные значения оформить списком. Ведь переменные из JS блока нельзя передать в HTML...
Автор: Cheery
Дата сообщения: 14.02.2013 19:01
MoLnuS

Цитата:
нельзя передать в HTML

почему это нельзя?
вы можете создать заранее html список и заполнить его с помощью javascript..
конечно это будет "мухлеж" и подразумевалось, наверно, создание списка тем же javascript.
а тут два способа - вы можете создавать его честно, через DOM или же создать его в виде html кода и вставить его в страницу.
что вызывает сложности?
Автор: MoLnuS
Дата сообщения: 15.02.2013 03:37

Цитата:
почему это нельзя?
вы можете создать заранее html список и заполнить его с помощью javascript..
конечно это будет "мухлеж" и подразумевалось, наверно, создание списка тем же javascript.
а тут два способа - вы можете создавать его честно, через DOM или же создать его в виде html кода и вставить его в страницу.
что вызывает сложности?

Собственно, через DOM и вызывает сложности(хотя как заполнить заранее созданный список-тоже не совсем представляю..). В интернетах смог найти лишь пару примеров подобного, там мало что понял.
Не могли бы Вы показать на небольшом примере оба предложенных способа? Первый, т.к. скорей всего он и требуется и второй для общего развития так сказать)
Автор: Cheery
Дата сообщения: 15.02.2013 04:47
MoLnuS

Цитата:
второй для общего развития так сказать

создаете строку с html кодом (так же, как и был бы в странице), после чего вставляете его в какой нить блочный элемент и все
<div id='test'></div>

код
var str = '<b>Я здесь</b>';
document.getElementById('test').innerHTML = str;

насчет первого
получаете значения в массив.. потом начинаете создавать элементы
var ul = document.createElement('ul');

создаете в цикле li элементы
var li = document.createElement('li');

заполняете его значением
li.innerHTML = 'какое то значение';

присоединяете этот элемент к родительскому ul
ul.appendChild(li);

создаете новый li, заполняете его, присоединяете... и так далее.

когда список готов, то цепляете его либо к странице, либо, опять, к блочному элементу.
document.getElementById('test').appendChild(ul);

вот и все

аналогично делается с таблицами, собираются по частям
http://pihpi.ru/javascript-sozdat-html-tablicu
Автор: MoLnuS
Дата сообщения: 15.02.2013 13:10
Cheery

Цитата:
вот и все

Огромное спасибо!=))) Помогло=) Отдельное спасибо, что всё с разъяснениями. Теперь, надеюсь, изучение JS должно пойти чуть полегче.
Почти точно, еще вернусь сюда с новыми вопросами
Автор: MoLnuS
Дата сообщения: 02.03.2013 08:40
Я возвратился с новым вопросом. Скорей даже математическим, но т.к. осуществить его на JS надо, пишу сюда =)

Суть такая. Есть формула, кояя выглядит вот так: (x+Pi)8.
Используя её, необходимо создать последовательность случайных(якобы) чисел, изменяя x на dx (в цикле при каждом шаге: x=x+dx, и затем в формулу уже новый икс. Икс должен быть в пределах (0,1) ). Создать последовательность вышло почти без проблем.
Но есть еще одно задание. Нужно программно вычислить такое минимальное(!) значение dx, при котором в получаемом по формуле числе гарантировано бы изменялась его целая часть. При чем, вводится только значение X.

Я в математике не отличник, хорошист =)) Но пока понять не смог, как блин вообще подойти к этому делу...=\\\ Надеюсь, кто-нибудь поможет, желательно с разъяснением, что и почему..=)
Автор: Cheery
Дата сообщения: 02.03.2013 09:02
MoLnuS
ну а какое это имеет отношение к js ?)

ну пусть (x+pi)^8 чему то равно..
возьмите ceil (округление вверх) этого числа (пусть получится A)
отсюда
x + dx + pi = A^(1/8)
dx = A^(1/8) - x - pi
вот и все, собственно.. dx должно быть больше или равно этой величине

ps: лучше больше, так как при вычислении с плавающей запятой довольно много "ошибок"..
на js это будет выглядеть как
dx = Math.pow(Math.ceil(Math.pow(x + Math.PI, 8)), 1/8) - x - Math.PI;
Автор: MoLnuS
Дата сообщения: 02.03.2013 10:05
Cheery
Извиняюсь, да, все же куда-то не сюда надо было писать)

Что-то я не понял со степенями=\\
Почему там А в 1/8?

А в итоге, в коде, сначала возводим в 8, затем округляем, а потом снова в 1/8?

Добавлено:
И не работает сей метод=((( Делал так, вместо ввода dx присвоил ему, указанное выше выражение и все. Остальное как и было в первом задание. Целая часть меняется лишь примерно через 3-5 шагов..
Автор: Cheery
Дата сообщения: 02.03.2013 15:27
MoLnuS

Цитата:
И не работает сей метод

или у вас проблема с руками?
http://jsfiddle.net/xmbma/
небольшая проблема может возникать, как и сказал, из за точности вычислений с плавающей точкой..
для этого dx можно домножить на какой нибудь коэффициент, а формула выше была чисто математической.
например так http://jsfiddle.net/xmbma/1/
Автор: MoLnuS
Дата сообщения: 02.03.2013 15:54
Странно, dx у меня идентичный тому, что и в Вашем примере выходил..
Чуть позже еще раз по коду пройдусь, поищу ошибку.. Думаю. найду=)

Видимо, у меня все же проблемы с руками, да Извините за излишнее беспокойство.
Спасибо за помощь

Добавлено:
Нашел опечатку в коде.
Но вот с формулой, по-моему, все же что-то не так..=\

Вводим икс= 0.1. Затем икс становится равным 0.1000069401358891, потом икс = 0.1000401738473137. И вот после этого значения икса, DX выходит нулевым (как в обеих Ваших прогах, так и в моей). И последующие числа выходят одинаковыми...


зы: так и не понял значение формул в коде=\
Автор: Cheery
Дата сообщения: 02.03.2013 20:37
MoLnuS

Цитата:
Затем икс становится равным 0.1000069401358891

откуда?
вы получаете условие на dx, которое не должно быть меньше чего то..
вы же в упор пытаетесь сделать так, чтобы на каждом шагу получалось "целое" число - зачем?

ps: и зачем вам вообще сдалось изменение целой части?
Автор: MoLnuS
Дата сообщения: 03.03.2013 06:18
Cheery

Возможно, я не так как-то объяснил..=\


Цитата:
Нужно программно вычислить такое минимальное(!) значение dx, при котором в получаемом по формуле числе гарантировано бы изменялась его целая часть.

Т.е. вводим ИКС, затем вычисляем для этого ИКСа DX, такое, чтобы после изменения X на DX и подстановки в формулу изменилась бы целая часть получаемого числа. Как-то так.
А по данной формуле выходит, что DX в определенный момент становится нулю равный.
Автор: Cheery
Дата сообщения: 03.03.2013 06:20
MoLnuS

Цитата:
А по данной формуле выходит, что DX в определенный момент становится нулю равный.

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


Цитата:
Возможно, я не так как-то объяснил

я все понял, только не понял зачем вам этот dx вообще сдался.. генератор случайных чисел не делает такие проверки.
Автор: MoLnuS
Дата сообщения: 03.03.2013 06:32
Cheery
Таки сделаю то, что давно надо было. Опубликую исходники)))

Вот первая задачка. Здесь было необходимо просто подставить все в формулу, вводя и ИКС и ДИКС.

Вот вторая, в которой уже вводится только ИКС, а с ДИКСом по формуле.
В плане задания вроде бы все верно? Мог перепутать местами строчки подсчета DX и X, путался с этим н-ое время..

Вот не понимаю результат выполнения второй. Если дальше второго\третьего шага теряется ДИкс, то что вообще делать? Ведь минимальный ДИКС, который необходим для изменения целой части числа есть по-любому... На втором шаге, при икс=0.1 он мин.DX=0.000000000002 (ну понятно да, почему оно в ноль уходит..).
Автор: Cheery
Дата сообщения: 03.03.2013 06:38
MoLnuS
я все равно не понимаю зачем вам вообще нужен dx.. генератор случайных чисел берет дробную часть предыдущего вычисления как новый x и так каждый раз

своим "подгоном" dx на каждом шаге вы будете терять точность, потому что разница будет уменьшаться (исключение когда целая часть, все же, поменяет значение, потому что тогда ceil выдаст число больше на 1)

то есть получили dx, что из за округления дает .9999999 и так далее..
вы его добавили к предыдущему значению, получили тот же .9999999, это даст dx еще меньше, близко к нулю.. что у вас и наблюдается.
Автор: MoLnuS
Дата сообщения: 03.03.2013 06:53

Цитата:
MoLnuS
я все равно не понимаю зачем вам вообще нужен dx.. генератор случайных чисел берет дробную часть предыдущего вычисления как новый x и так каждый раз

Ой как все..%))
Т.е. DX высчитать только для первого (введеного икса), затем x=x+dx, потом выражение, а следующий икс брать уже как дробную часть предыдущего выражения? Или как?%)) С математикой этой еще сложней, чем с программированием=\\

А DX вообще нужен по заданию..%) Если Вы об этом. Хотя я уже сомневаюсь, что Вы об этом..=)

Прошу простить меня за такую назоиливость и непонимание...=\\

Страницы: 12345678910111213141516171819202122

Предыдущая тема: jQuery: Перемещение якоря на верх страницы


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.