Jquery динамическое имя переменной

Имена

Динамические имена переменных jQuery

Я хотел бы взять значение атрибута li ID (который будет userID) и использовать его как часть строки, которую я в конечном итоге буду использовать как часть имени переменной. Я буду использовать это имя переменной для создания массива.

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

4 ответа

Возможный Дубликат : javascript-динамические переменные Динамические имена переменных Javascript Мне нужно создать несколько объектов на странице и назвать их последовательно. Есть ли способ сделать это в JavaScript? for (i=0;i

Используйте объект для хранения различных пользовательских массивов:

Однако вы можете не хранить объект userData в глобальном пространстве имен; чтобы предотвратить случайные конфликты имен, вы должны, по крайней мере, поместить его в свое собственное пространство имен.

Переменные можно хранить в глобальном объекте window :

Ты можешь сделать это вот так..

Я работаю над сценарием ajax google maps, и мне нужно создать динамические имена переменных в цикле for. for (var i = 0; i

Похожие вопросы:

Чтобы проиллюстрировать проблему, я создал makefile, который сначала определяет список автомобилей, а затем для каждого автомобиля список цветов: CARS = Ford Ferrari Mercedes Toyota Ford_COLOURS =.

Я недавно искал имена динамических переменных. И это хорошо сработало для меня с window[varName+dynamic part] Но есть ли какой-то способ сделать это с массивами? var monster2_data=[2,Ugly.

Я постоянно слышу о том, как я должен использовать массивы и объекты для достижения динамических имен переменных. Я не уверен, как заставить это работать с моим текущим проектом. Мне нужны.

Возможный Дубликат : javascript-динамические переменные Динамические имена переменных Javascript Мне нужно создать несколько объектов на странице и назвать их последовательно. Есть ли способ сделать.

Возможный Дубликат : javascript-динамические переменные Можно мне что-нибудь вроде этого Jquery for(var i=0;i <10;i++) < var (eval(i+17)) = y; y++; >Мне это нужно, потому что я хочу иметь.

Читайте также:  Имя под отчество владиславович

Возможный Дубликат : создание нескольких переменных на основе числа int Цель C эквивалент PHP’s “Variable Variables” Я хотел бы использовать некоторые имена динамических переменных в.

Я использую jQuery импровизированные подсказки в своем приложении, и они очень полезны. Однако для вызова импровизированных подсказок вам нужно указать имена кнопок и их возвращаемые значения.

Источник

Динамическое имя функции в javascript?

Я хотел бы иметь этот:

18 ответов:

обновление

вы можете использовать eval:

это будет в основном делать это на самом простом уровне:

Если вы хотите получить больше фантазии, у меня есть написанная статья на «динамические имена функций в JavaScript».

вы можете использовать объект.defineProperty, как указано в ссылке MDN JavaScript [1]:

в последних движках, вы можете сделать

выводит ()>) в FireFox.
(Это почти та же идея, что данное решение, только он использует общий объект и больше не заполняет непосредственно оконный объект с функциями.)

следующее Не обязательно проблематично,

и так гораздо более соответствует исходному контексту проблемы.

учитывая эти соображения,

максимально поддерживает глобальную вычислительную среду с семантикой и синтаксисом примера OP.

наиболее проголосовавший ответ получил уже определенное тело функции [String]. Я искал решение для переименования уже объявленного имени функции и, наконец, после часа борьбы я справился с этим. Это:

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

Так это будет работать просто отлично:

сопротивляйтесь искушению создать именованные методы фабрики функций, поскольку вы не сможете передать функцию извне и перестроить ее в синтаксическую позицию, чтобы вывести ее имя. Тогда уже слишком поздно. Если вам действительно нужно это, вы должны создать обертку. Кто-то сделал это здесь, но это решение не работает для классов (которые также являются функциями).

здесь был написан гораздо более глубокий ответ со всеми описанными вариантами:https://stackoverflow.com/a/9479081/633921

для установки имени существующей анонимные функции:
(На основе ответа @Marcosc)

Примечание: не делай этого ;/

Читайте также:  Учителя школы 1619 имени марии ивановной цветаевой

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

динамические методы объекта могут быть созданы с использованием расширений литералов объектов, предоставляемых ECMAScript 2015 (ES6):

вывод выполнения кода выше:

спасибо Marcosc! Основываясь на его ответе, если вы хотите переименовать любой используйте этот:

эта служебная функция объединяет несколько функций в одну (используя пользовательское имя), только требование состоит в том, что предоставленные функции правильно «новые выровнены» в начале и конце его совка.

есть два способа добиться этого, и у них есть свои плюсы и минусы.

name определение свойства

определение неизменяемые name свойства функции.

плюсы

минусы

функция вычисления выражения

сделать имени функции выражение и оценка С Function конструктор.

плюсы

минусы

мне больше повезло в объединении Даррен!—5—> и kyernetikos это.

Примечание: configurable установлено значение true соответствовать стандартным спецификациям ES2015 для Function.name 1

Это особенно помогло обойти ошибку в Webpack, подобную этот.

Update: я думал опубликовать это как пакет npm, но этот пакет из синдресорхус делает то же самое.

альтернативный подход заключается в том, чтобы обернуть функцию во внешнюю переименованную оболочку, которую вы также можете передать во внешнюю оболочку, если вы не хотите загрязнять окружающее пространство имен. если вы хотите фактически динамически создать функцию из строк (что делает большинство из этих примеров), тривиально переименовать источник, чтобы сделать то, что вы хотите. Если, однако, вы хотите переименовать существующие функции, не затрагивая их функциональность при вызове в других местах прокладка-единственный способ достичь этого.

Источник

Обработка динамически добавленных в DOM элементов

jQuery работает с элементами, которые были на странице на момент инициализации кода. Если добавляются новые элементы — при помощи ajax’а или функций типа append() — то события не затрагивают их.

Как же работать с новыми созданными элементами DOM?

Оказывается для динамических элементов используется делегированная обработка событий.

Читайте также:  Индийская богиня с множеством рук имя

Допустим на странице есть список (ul), на элементах которого необходимо обрабатывать событие click. Если после установки соответствующих обработчиков, в список будут добавлены новые элементы, то они уже не будут реагировать на «клики», поскольку непосредственно к новым элементам, обработчики прикреплены не были. Эта особенность может породить много проблем и коварных логических ошибок.

Для таких случаев jQuery имеет возможность организовывать так называемую делегированную обработку событий. В этом случае, jQuery вместо заданного обработчика (в параметре handler) устанавливает собственный специальный обработчик. Причем он не устанавливается непосредственно на элементы, на которых необходимо обрабатывать события (назовем их inner-элементами), а на содержащие их элементы (назовем их outer-элементами. Получается, что inner находятся внутри outer). После того, как событие происходит на одном из элементов inner, оно начинает подниматься вверх по иерархии DOM. В какой то момент оно оказывается на одном из элементов outer, на котором срабатывает специально установленный обработчик, который проверяет, поднялось ли событие от одного из элементов inner. Если это так — запускается обработчик handler.

В случае делегированной обработки, добавление новых inner-элементов внутрь outer-элементов, не нарушает работоспособность скрипта — события исправно обрабатываются, даже если они возникли на новых inner элементах.

Чтобы организовать делегированную обработку, необходимо во втором параметре метода on задать селектор. В этом случае роль outer-элементов будут играть элементы к которым был применен метод, а роль элементов inner — элементы, находящиеся внутри outer и удовлетворяющие заданному селектору. То есть, если необходимо делегировано обрабатывать событие click на элементах списка, то следует делать это так:

Прямые обработчики в этой же ситуации устанавливались бы так:

Второе важное преимущество делегированной обработки это экономия вычислительных ресурсов. Допустим, есть список, содержащий несколько сотен или даже тысяч элементов. А нам нужно обрабатывать нажатие мышью по ним. Тогда, чтобы обрабатывать события напрямую, нужно будет привязать обработчик ко всем элементам, что потребует значительных вычислительных ресурсов. При делегированной обработке, будет установлен только один обработчик, который будет «ловить» события от всех элементов списка.

Источник

Оцените статью
Имя, Названия, Аббревиатуры, Сокращения
Добавить комментарий

Adblock
detector