在函数z中访问函数x内的变量

时间:2014-03-04 22:06:01

标签: javascript jquery

我有一个页面,其中DOM元素存储在变量中,在它自己的函数中我可以引用此var来更改它。但是在其他功能中,我无法做到这一点.. 如何从第二个函数访问DOMtime?

应该注意的是,第一个函数将始终在第二个函数之前调用,因此DOMtime将始终就绪。

$('.page').on("click", '.button', function () {
    var DOMtime = $(this).parent().siblings().find('span.time')[0];
    $(DOMtime).text("test");

});
$('.modal').on("click", '.save', function () {

    $(DOMtime).text("another test");

5 个答案:

答案 0 :(得分:0)

您应该使用全局变量来访问DOMtime。尝试首先将其定义为全局变量

答案 1 :(得分:0)

为什么不做这样的事呢?

$(function() {

    var DOMtime = $(this).parent().siblings().find('span.time')[0];

    $('.page').on("click", '.button1', function() {

        DOMtime.text("test");

    });

    $('.modal').on("click", '.button2', function() {

        DOMtime.text("another test");

    });

});

答案 2 :(得分:0)

这与范围闭包有关。一般的想法是,您需要var想要在祖先范围内分享的内容;

var foo; // variable to share
function a() {
    foo = 1;
}
function b() {
    return foo;
}
a();
b(); // 1

如果您不想污染您正在使用的命名空间,可以使用 IIFE ,但请记住return您想要的内容,以便继续存在/可引用;

var something = (function () { // IIFE starts, contents in own namespace
    var x = false; // this won't be referenceable outside the IIFE
    function something() { // some function
        return x = !x;
    }
    return something; // now return it so it can exist outside the IIFE
}()); // invoke IIFE
something(); // true
something(); // false
something(); // true
// but
x; // undefined (or ReferenceError in strict mode)

答案 3 :(得分:0)

只需在上限范围内声明它

var DOMTime;

$('.page').on("click", '.button1', function () {
    DOMtime = $(this).parent().siblings().find('span.time')[0];
    $(DOMtime).text("test");

});
$('.modal').on("click", '.button2', function () {

    $(DOMtime).text("another test");

如果点击是在.button2之前触发的话,请不要这样做.button1 DOMTime仍然是undefined

答案 4 :(得分:0)

您可以指定一个全局变量,以便在其他功能的任何位置访问它:

var globalvar = "";
$('.page').on("click", '.button1', function () {
    var DOMtime = $(this).parent().siblings().find('span.time')[0];
    $(DOMtime).text("test");
    globalvar = $(this);

});
$('.modal').on("click", '.button2', function () {

    $(DOMtime).text("another test");
    alert(globalvar);
 }

然后你就可以在任何地方获得dometime变量;)