В данный момент использую такой код, но говорят что функцию eval использовать не безопасно, предложите аналоги или как вообще нужно реализовывать такое. Код (Javascript): let loginForm = { 'email' : function() { alert('123'); } }; $('input').blur(function() { const element = $(this).attr('id'); const form = $(this).closest('form').attr('id'); const func = form + '.' + element + '()'; eval(func); });
Пробовал уже когда вписываю сразу функцию то работает а если переменную где генерируется название функции не работает. Код (Javascript): new Function(loginForm.email()); //работает new Function(func); // не работает
Он добавляет значение переменной туда как строку string а нужно как то обозначить или дать понять что это function
@Khaybulla, приглядись к спойлеру. У new Function() - два параметра. Первый - аргументы, передаваемые в функцию (у нас - пустая строка), второй - имя функции (у нас - func). И не забудь скобочки после вызова new Function и перед точкой с запятой. --- Добавлено --- Потому что явно вызывается функция liginForm.email() перед выполнением new Function() То есть, не работает
Вставил твой вариант со спойлера выдало ошибку "Uncaught TypeError: loginForm.email is not a function" что такой функции нет
Код (Javascript): let loginForm = { 'email' : function() { alert('123'); } }; Может из того что объект из функций хотя когда делаю просто функцию тоже не работает ошибку дает что не определена функция --- Добавлено --- Код (Javascript): let loginForm = { 'email' : function() { alert('123'); } }; $('input').blur(function() { const element = $(this).attr('id'); const form = $(this).closest('form').attr('id'); const func = form + '.' + element + '()'; new Function('', func)(); // eval(func); }); В данный момент код выглядит так пишет что такой функции нет, переменная func дает строку - loginForm.email()
@Khaybulla, глянь для начала простой пример: HTML: <!doctype html> <html> <head> </head> <body> <script> let loginForm = { 'email' : function() { console.log('12333'); } }; const element = 'email'; const form = 'loginForm'; const func = form + '.' + element + '()'; //console.log(func); new Function('',func)(); </script> </body> </html> Есть ещё вариант - "спрятать" формы в объект и использовать скобочки квадратные для доступа к элементам объекта: HTML: <!doctype html> <html> <head> </head> <body> <script> let obj = { loginForm : { 'email' : function() { console.log('12333'); } } }; const element = 'email'; const form = 'loginForm'; obj[form][element](); </script> </body> </html>
Первый вариант также ошибку выдает, а второй работает немного структуру переделал и так даже лучше теперь. Спасибо большое, за то что время уделил и помог!