Javascript обратный вызов из атрибута формы - PullRequest
1 голос
/ 10 февраля 2012

Я установил код автоматической отправки формы.В основном, когда форма отправлена, javascript позаботится об этом, найдет все входные данные и тому подобное и отправит данные через ajax в действие attr формы.

$j('body').delegate('form', 'submit', function(e) {
    e.preventDefault();
    if($j(this).prop('data-callback', true))
        asf.forms.processForm($j(this).attr('name'), $j(this).attr('data-callback'));
    else
        asf.forms.processForm($j(this).attr('name'));
});

Но мне нужно включить обратные вызовы.Мне нужно сделать код глобальным, поэтому я не могу кодировать какие-либо особенности для каждой формы.Поэтому я подумал о добавлении атрибута с именем функции обратного вызова, например:

<form action="" method="" data-callback="posts.addPost()">

Проблема в том, что я не знаю, как запустить эту функцию внутри javascript.Есть идеи?Я не могу использовать onsubmit, потому что мне нужен доступ ко всей информации о формах, что означает выполнение этого обратного вызова в ответе ajax.

Спасибо

Ответы [ 2 ]

10 голосов
/ 10 февраля 2012

Я знаю, что Eval - это зло, но это кажется единственно разумным решением:

eval($(form).attr('data-callback'));

Если вы указали только имя метода в атрибуте data-callback (например, data-callback="posts.addPost"), его можно вызвать без eval:

var methodName = $(form).attr('data-callback');
var parts = methodName.split('.');
var method = window;

$(parts).each(function(){
    method = method[this];
});

method();
2 голосов
/ 10 февраля 2012

Чтобы достичь этого, не прибегая к eval, я предлагаю вам сохранить все ваши «обратные вызовы форм» в объекте, например:

var formCallbacks = {
  'posts.addPost': function() {
    // ...
  },
  // ...
};

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

function(args, callbackName) {
  formCallbacks[callbackName]();
  // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...