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

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

        event.preventDefault();
    });
});

function addBubble(){
    alert('a');
}

表格:

<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对象调用它.
window["functionName"].call();

从addBubble中删除括号

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

使用Javascript

jQuery(function($) {
    $('form[data-async]').on('submit',status) {
                if(typeof window[apply] == "function")
                    window[apply].call(); //window[apply](); or window[apply].apply(); will work too
            }
        });

        event.preventDefault();
    });
});

function addBubble(){
    alert('a');
}

猜你在找的JavaScript相关文章