Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自表单属性的Javascript回调_Javascript_Jquery_Post_Callback - Fatal编程技术网

来自表单属性的Javascript回调

来自表单属性的Javascript回调,javascript,jquery,post,callback,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'

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


谢谢

我知道eval是邪恶的,但这似乎是唯一合理的解决方案:

eval($(form).attr('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();

我知道eval是邪恶的,但这似乎是唯一合理的解决方案:

eval($(form).attr('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();

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

var formCallbacks = {
  'posts.addPost': function() {
    // ...
  },
  // ...
};
使用
数据回调
机制,可以在响应处理程序中查找回调:

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

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

var formCallbacks = {
  'posts.addPost': function() {
    // ...
  },
  // ...
};
使用
数据回调
机制,可以在响应处理程序中查找回调:

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

如果我理解正确,您可以使用eval($j(this).attr(“数据回调”))这就是您需要的吗?如果我理解正确,您可以使用eval($j(this).attr(“数据回调”))这就是您需要的吗?不仅是解决方案:)我这样做了:函数run(code){var res=new function('return'+code+'| false');return res()}运行($(form.attr('data-callback'));这几乎是一样的。例如,请参阅不仅仅是解决方案:)我这样做了:函数run(code){var res=new function('return'+code+'| | false');return res();}run($(form).attr('data-callback');这几乎是一样的。例如,见