来自表单属性的Javascript回调

时间:2012-02-10 13:09:20

标签: javascript jquery post callback

我已经设置了一些自动表单提交代码。基本上,当提交表单时,javascript会处理它,查找所有输入等,并通过ajax将数据发送到表单的action 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 个答案:

答案 0 :(得分:10)

我知道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();

答案 1 :(得分:2)

要实现这一点而不诉诸eval,我建议您将所有“表单回调”存储在对象中,如下所示:

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

使用data-callback机制,您将在响应处理程序中查找回调:

function(args, callbackName) {
  formCallbacks[callbackName]();
  // ...
}