Javascript 使用传递的数据属性调用函数
我有这样一个表格:Javascript 使用传递的数据属性调用函数,javascript,jquery,Javascript,Jquery,我有这样一个表格: <form data-controller="Posts" data-method="admin_add"> 这是基于我在这里读到的内容: 它应该被称为: Posts.admin_addformData 但它不调用函数。。。如果我删除if语句,那么我会得到一个错误,它不是一个函数。。。有什么想法吗?记住,您使用方括号是为了避免使用eval: 完美的不知道双方括号会处理两个变量之间的周期。谢谢。我使用.attr而不是.data,因为.data有时很有趣,attr是
<form data-controller="Posts" data-method="admin_add">
这是基于我在这里读到的内容:
它应该被称为:
Posts.admin_addformData
但它不调用函数。。。如果我删除if语句,那么我会得到一个错误,它不是一个函数。。。有什么想法吗?记住,您使用方括号是为了避免使用eval:
完美的不知道双方括号会处理两个变量之间的周期。谢谢。我使用.attr而不是.data,因为.data有时很有趣,attr是访问数据-*属性的正确方法。使用数据的唯一原因是,如果要在元素上存储不应在属性中的数据。@t.J.Crowder,但这不是问题所在。。。我只是放了那个评论,让其他开发人员知道我为什么使用那个方法@卡梅伦:我明白。我只是说,这是正确的方法,你不需要解释什么。遗憾的是,很多人误解了数据……严格来说,最好的方法是这样。getAttributedata-controller-当等价物几乎相同时,没有理由在jQuery上浪费处理器时间。@NiettheDarkAbsol:是否使用jQuery与JavaScript无关。我真希望人们能明白这一点。这是jQuery与DOM的较量,而不是jQuery与vanilla/pure/whatever的较量。不管是JavaScript还是CoffeeScript/TypeScript/Dart。直接重新使用DOM:使用jQuery伪等价物的最大好处是集合论,在集合论中,如果集合是空的,则返回未定义的,而不是抛出。减少了很多防守!==空值。当然,在这种情况下不是这样。
$(document).on('submit', 'form', function(e){
e.preventDefault(); // there is no server so nothing to submit to
var formData = $(this).serialize();
var controller = $(this).attr('data-controller');
var method = $(this).attr('data-method');
// I use .attr instead of .data because .data is funny sometimes
var fnString = controller + '.' + method;
var fn = window[fnString];
if (typeof fn === "function") fn(formData);
});
var fn = window[controller][method];
fn(formData);