2016-01-05 3 views
1

Я пытаюсь избавить свой код пары eval, который у меня есть в своем javascript, но я не уверен в лучшем способе достижения того, что я пытаюсь сделать.Как избежать этого javascript eval()?

У меня есть «форма фильтра» на кучу моих страниц, с прикрепленным к нему немного JS, который перезагружает части страницы в зависимости от того, что делает пользователь.

Различные страницы требуют разных действий.

Так что мое решение (что я придумал yearrrrs назад ...) был

<form name="callback_loadCalendar"> 
<form name="callback_loadNames"> 

Etc.

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

if (f.getAttribute('name') && f.getAttribute('name').indexOf('callback') === 0) 
    eval(f.getAttribute('name').substr(9)+'()'); 

Например, которые назовут loadCalendar() и loadNames() соответственно.

Что я должен делать вместо этого?

Спасибо!

+0

Вопрос в том, что * когда * это код выполнен? Кажется, вы можете просто прикрепить правильную функцию к событию onsubmit формы. – JJJ

+0

Возможно, хотя и не так кратко/просто я не думаю. – Codemonkey

ответ

2

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

+0

Отлично, и так просто, спасибо! Я предположил, что мне придется сделать некоторые основные перекодировки на всех фронтах, чтобы добиться этого совершенно по-другому. – Codemonkey

+0

А, а если нет? Будет ли это работать, если они все завернуты в IIFE? Должно быть, я полагаю? – Codemonkey

+0

@Codemonkey в этом случае вы можете сделать что-то вроде 'var callbacks = {loadNames: function() {}, loadCalendar: function() {}}', затем 'callbacks [f.getAttribute ('name'). Substr (9)](); ' –