Javascript按数据属性中的函数名称回调

前端之家收集整理的这篇文章主要介绍了Javascript按数据属性中的函数名称回调前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为ajax调用提供回调函数,其中函数名称保存在表单的“data-apply”属性下.
  1. jQuery(function($) {
  2. $('form[data-async]').on('submit',function(event) {
  3. var $form = $(this);
  4. var $target = $($form.attr('data-target'));
  5. var apply = $form.attr('data-apply');
  6. $.ajax({
  7. type: $form.attr('method'),url: $form.attr('action'),data: $form.serialize(),success: function(data,status) {
  8. var callBackFunc = new Function(apply);
  9. callBackFunc.call();
  10. }
  11. });
  12.  
  13. event.preventDefault();
  14. });
  15. });
  16.  
  17. function addBubble(){
  18. alert('a');
  19. }

表格:

  1. <form id="111" class="form-horizontal " data-async data-target="#rating-modal" data-apply="addBubble();" action="/some/action/performed" method="POST">

我希望在这种情况下避免使用eval(),因为eval()可能会引入安全性和性能问题.不确定Function()是一种更安全的方法,还是有一种完全不同的方法来处理它.

那么无论如何都要传递函数回调以处理差异情况?

原始代码来自:https://gist.github.com/havvg/3226804

解决方法

由于函数是全局定义的,因此可以通过window对象调用它.
  1. window["functionName"].call();

从addBubble中删除括号

  1. <form id="111" class="form-horizontal " data-async data-target="#rating-modal" data-apply="addBubble" action="/some/action/performed" method="POST">

使用Javascript

  1. jQuery(function($) {
  2. $('form[data-async]').on('submit',status) {
  3. if(typeof window[apply] == "function")
  4. window[apply].call(); //window[apply](); or window[apply].apply(); will work too
  5. }
  6. });
  7.  
  8. event.preventDefault();
  9. });
  10. });
  11.  
  12. function addBubble(){
  13. alert('a');
  14. }

猜你在找的JavaScript相关文章