将变量从一个JavaScript回调匿名函数传递给另一个

时间:2015-04-11 05:19:58

标签: javascript jquery

如下所示,我将inputclass回调中的变量传递给validate回调。

是否可以在不使用全局变量的情况下这样做,因此在将jQuery插件应用于给定元素时它将是实例本地的?

$('#name').editable({
    inputclass: function() {
        globalVariable=this;
    },
    validate: function (value) {
        console.log(globalVariable);
        return 'pause';
    }
});

Fiddle

3 个答案:

答案 0 :(得分:1)

由于在inputclass()和validate()中指的是不同的元素,因此共享数据有点麻烦。我的想法也是使用data(),但是要将数据从inputclass()传递给validate(),你需要从inputclass()引用的输入向上移动dom,直到.ui-tooltip,查找元素validate()指的是通过id

$('#name').editable({
    inputclass: function(e, f) {
        $("a[aria-describedby=" + $(this).closest(".ui-tooltip").prop("id") + "]").data("shared", "somedata");
    },
    validate: function (value) {
        console.log("validate", $(this).data("shared"));
        return 'pause';
    }
});

更新了jsfiddle以演示:

jsfiddle

答案 1 :(得分:0)

我建议在这里使用数据属性来传递数据。

$('#name').editable({
    inputclass: function() {
        var value = 'some value';
        $(this).data('input-value', value);
    },
    validate: function (value) {
        var inputValue = $(this).data('input-value');
        console.log(inputValue);
        return 'pause';
    }
});

只有在inputClass

之前知道validate函数被调用时,此方法才有效

P.S:如果您只想传递this,则完全没有必要,因为它将在两个函数中自动绑定。

答案 2 :(得分:0)

您需要在函数范围之外定义该变量: 试试这个:

  var globalVariable;
    $('#name').editable({
        inputclass: function() {
            globalVariable='your value';
        },
        validate: function (value) {
            console.log(globalVariable);
            return 'pause';
        }
    });