js匿名函数怎么能传递参数

 <script>
        layui.config({
            base: '/static/admin/' //静态资源所在路径
        }).extend({
            index: '/lib/index' //主入口模块
        }).use(['index', 'useradmin', 'element', 'table', 'laydate'], function() {
            var $ = layui.$,
                form = layui.form;
            
            form.on('submit(LAY-user-info-submit)',function(data){
                var field = data.field;
                 this.save(field);
            });
            this.save = function(data){
                layer.msg("data");
            };

js太长了,只拷贝了有问题的地方。

我外部定义了一个save函数,怎么在里面不能调用,提示错误说save不存在,未定义。Uncaught TypeError: this.save is not a function

图片描述

怎么能这个参数field传给save函数呢?

阅读 2.8k
2 个回答

这是由于 javascript 中 this 关键字在不同函数内所指向的对象不同所致,this.save 定义的时候 this 应该是指向了 layui ,而给 form 绑定事件的时候 this 应该是指向 form ,因此定义 save 函数的时候 this.save 改为 form.save ,应该就可以了。

目测是由于save函数调用的上下文指向错误的作用域导致的,解决办法是:

var _this = this; //保存外部作用域的this指针
layui.config({
    base: '/static/admin/' //静态资源所在路径
}).extend({
    index: '/lib/index' //主入口模块
}).use(['index', 'useradmin', 'element', 'table', 'laydate'], function() {
    var $ = layui.$,
    form = layui.form;

    form.on('submit(LAY-user-info-submit)',function(data){
        var field = data.field;
        _this.save(field); //这样调用应该就不会报错了
    });
    this.save = function(data){
        layer.msg("data");
    };
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题