Javascript 通过数据属性中的函数名回调

标签 javascript jquery

我正在尝试为 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', 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) {
                if(typeof window[apply] == "function")
                    window[apply].call(); //window[apply](); or window[apply].apply(); will work too
            }
        });

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

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

关于Javascript 通过数据属性中的函数名回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32826789/

相关文章:

javascript - Firebase 删除查询结果

javascript - 在 ASP.NET MVC 中创建 _layout 和 View 之间可用的 jQuery "object"

php - 每个用户仅触发一次 jquery 事件

javascript - 隐藏父容器时不呈现浮点图

javascript - 获取当前焦点输入文本字段的索引

javascript - 防止来自 "breaking out of frame"的子 iframe

jquery - 为什么此 JSON 数组中的每一项都始终获取 'undefined'?

javascript - onblur,仅在 jquery 和 javascript 中工作一次

javascript - 在 Meteor 中访问 Stylus 中的 Javascript 变量

c# - ASP.NET 从 JavaScript 调用 C# 函数