【问题标题】:Javascript callback from form attribute来自表单属性的 Javascript 回调
【发布时间】:2012-02-10 13:09:19
【问题描述】:

我已经设置了一些自动表单提交代码。基本上,当提交表单时,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 响应中执行此回调。

谢谢

【问题讨论】:

标签: javascript jquery post callback


【解决方案1】:

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

【讨论】:

  • 不仅仅是解决方案 :) 我已经做到了:function run(code) { var res = new Function('return ' + code + '|| false');返回水库(); } run($(form).attr('data-callback'));
  • 这几乎是一样的。以this 为例
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多