来自表单属性的Javascript回调
我已经设置了一些自动表单提交代码。基本上,当表单提交时,javascript会处理它,查找所有输入等,并通过ajax将数据发送到表单的action attr来自表单属性的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'
$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');这几乎是一样的。例如,见