2012-06-03 3 views
0

Я пытаюсь выяснить, как вызвать яваскрипта функцию, используя текст, снятый с Div идентификатор с помощью JQuery, как это:использование текста передается функции называть JavaScript функцию

$('#selector').attr('id'); 

Идентификатор возвращается является текстовый объект, который я хочу использовать для вызова объекта javascript с тем же именем. В основном у меня есть встреча в календаре и набор объектов, содержащих различные переменные, такие как причина, время, места и т. Д. В фоновом режиме. Эти объекты были созданы с использованием специальной функции конструктора, подобной этой.

function appt(id,...){ 
    this.id; 
    etc... 
} 
var appt12 = new appt(id,...); 

Затем я хочу, чтобы быть в состоянии назвать его как объект вдоль линий вар ид = appt12.id.

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

Использование Eval будет выглядеть следующим образом:

var apptObj = eval(apptid); 

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

Любые мысли о неэвариантном подходе к решению этой проблемы.

Заранее спасибо.

+0

Что случилось с eval? – georg

ответ

1

Вы должны держать функции в объекте, как это:

var operations = { 
    "add": function(){...}, 
    "remove": function(){...}, 
    "edit": function(){...} 
}; 

Затем вызовите его следующим образом:

var op = element.id; 
operations[op](); 

Вы можете использовать глобальный объект окна, который Уфук упомянул, но, как правило, он нахмурился. Если у вас есть несколько связанных функций, сохранение их в объекте и предотвращение их плавания в глобальной области, считается более чистым и более организованным.

+0

Я думаю, что было бы полезно прояснить мои многочисленные функции. Однако, как бы я создал новый объект в объекте. Извините, все еще учась –

+0

Первая строка, которую я вам дал, называется «объектная буквальная запись». Это серия разделенных запятыми клавиш: пары значений. В этом случае значения являются функциями, а 'operations.add' или' operations ["add"] 'будут вызываться со скобками после них. – Dennis

0

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

//get the function first 
var myFunction = window[functionName]; 

//call the function with your parameters 
myFunction(param); 

Update:

Если я правильно понимаю, что вы пытаетесь создать переменные с помощью идентификаторов, если это так, вы можете сделать это следующим образом:

window['appt'+id] = appt(id); 

Как Деннис упомянул было бы лучше, если бы вы не использовали глобальные переменные. Вместо этого вы можете удерживать все эти переменные в другом объекте. Вот пример:

//initialize it if it is undefined 
var apptHolder = apptHolder || {}; 

//assign the property 
apptHolder['appt'+id] = appt(id); 

//if you need the apptHolder to be global 
window.apptHolder = apptHolder; 
+0

Спасибо Ufuk. Я добавил более подробно выше. Я пытаюсь вызвать пользовательскую функцию, используемую для создания серии объектов с разными идентификаторами. –

+0

Ufuk благодарит за помощь в этом, это действительно прояснило это для меня. –

Смежные вопросы