Я работаю над динамическим созданием некоторого кода JavaScript, который будет вставлен в веб-страницу по мере ее создания.
JavaScript будет использоваться для заполнения на listbox
основе выбора в другом listbox
. Когда выбор одного из них listbox
изменен, он будет вызывать имя метода на основе выбранного значения listbox
.
Например:
Listbox1
содержит:
Colours
Shapes
Если Colours
он выбран, он вызовет populate_Colours
метод, который заполняет другой listbox
.
Чтобы прояснить мой вопрос: как мне сделать этот populate_Colours
вызов в JavaScript?
javascript
dynamic
methods
Крис Б.
источник
источник
Ответы:
Предполагая, что
populate_Colours
метод находится в глобальном пространстве имен, вы можете использовать следующий код, который использует как возможность доступа ко всем свойствам объекта, как если бы объект был ассоциативным массивом, так и то, что все глобальные объекты на самом деле являются свойствамиwindow
основного объекта.источник
$.fn[method_prefix + method_name](arg1, arg2);
try
/catch
block.$(function () {
иwindow.load
кода :)Как указывает Триптих, вы можете вызвать любую функцию глобальной области видимости, найдя ее в содержимом хост-объекта.
Более чистый метод, который намного меньше загрязняет глобальное пространство имен, состоит в том, чтобы явно поместить функции в массив прямо следующим образом:
Этот массив также может быть свойством какого-либо объекта, кроме глобального объекта хоста, что означает, что вы можете эффективно создавать свое собственное пространство имен, как это делают многие библиотеки JS, такие как jQuery. Это полезно для уменьшения конфликтов, если / когда вы включаете несколько отдельных служебных библиотек на одну страницу, и (если это позволяют другие части вашего дизайна) может упростить повторное использование кода на других страницах.
Вы также можете использовать такой объект, который может оказаться чище:
Обратите внимание, что с массивом или объектом вы можете использовать любой метод установки или доступа к функциям, и, конечно, можете хранить там и другие объекты. Вы можете дополнительно сократить синтаксис любого метода для контента, который не является таким динамичным, используя буквальную нотацию JS, например:
Изменить: конечно, для более крупных функциональных блоков вы можете расширить приведенное выше до очень распространенного «модульного шаблона», который является популярным способом инкапсуляции функций кода в организованном порядке.
источник
var dyn_functions = {};
так, чтобы без необходимости создавать массив ... это не большая проблема.Я бы рекомендовал НЕ использовать
global
/window
/eval
для этой цели.Вместо этого сделайте это так:
определить все методы как свойства Handler:
Теперь назовите это так
Выход: Джерри
Кейс при импорте функций из разных файлов
источник
сделать это можно так:
источник
Внутри
ServiceWorker
илиWorker
заменитеwindow
наself
:У рабочих нет доступа к DOM, поэтому
window
ссылка недействительна. Эквивалентный идентификатор глобальной области видимости для этой цели -self
.источник
Я бы не рекомендовал использовать окно, как предлагают некоторые другие ответы. Используйте
this
и объем соответственно.Еще один изящный трюк - вызов в разных областях видимости и использование его для наследования. Допустим, вы вложили функцию и хотите получить доступ к глобальному объекту окна. Вы могли сделать это:
источник
Привет, попробуй,
он сам будет обрабатывать параметры.
источник
functionName
... отвечающий сделал предположение, что вы уже это определили.Вот рабочее и простое решение для проверки существования функции и динамической сортировки этой функции. другой функцией;
Функция триггера
и теперь вы можете динамически генерировать функцию, возможно, используя php, как это
теперь вы можете вызвать функцию, используя динамически сгенерированное событие
точный HTML-код, который вам нужен,
источник
Попробуйте с этим:
источник
eval
функции есть некоторые странные побочные эффекты, связанные с ее использованием. Я обычно стараюсь держаться от этого подальше, если только это не последнее средство.