ajsie
ajsie

Reputation: 79826

global variable in javascript?

i have this code:

    $(".link").each(function() {
            group += 1;
            text += 1;
            var links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);

after it has looped every .link it will exit the each loop and encode the array 'links' to json. but the array 'links' is a local variable inside the each-loop. how can i make it global outside the loop?

Upvotes: 3

Views: 367

Answers (6)

Anil Namde
Anil Namde

Reputation: 6618

JavaScript only understand two scopes

  1. Global: Which is any variable outside the function and variables declare without the var

  2. Function : Anything which is inside the function.

So i will suggest you the closure approach as follows

 function getJSONLinks()
 {
      var links = [];
      $(".link").each(function() {
        group += 1;
        text += 1;
        links[group] = [];
        links[group][text] = $(this).val();
       }
     });
     return $.toJSON(links);
 }

Upvotes: 0

simon
simon

Reputation: 12922

To define a global variable, you can either

a) define the variable outside of a function (as already mentioned in other answers)

or

b) attache the variable to the window object


$(".link").each(function() {
            group += 1;
            text += 1;
            window.links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);

or

c) create a variable without the var keyword


$(".link").each(function() {
            group += 1;
            text += 1;
            links = [];
            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);

Upvotes: 0

cletus
cletus

Reputation: 625397

Define links outside the loop:

var links = [];
$(".link").each(function() {
  group += 1;
  text += 1;
  links[group] = [];
  links[group][text] = $(this).val();
});
var jsonLinks = $.toJSON(links);

I should also point out that this doesn't make a lot of sense because you will end up element 7, for example, being an array with a single element (indexed as 7) to the value. Is this really what you want?

What I imagine you want is an array of the values. If so, why not use map()?

var links = $(".link").map(function(i, val) {
  return $(val).val();
});

Upvotes: 9

kgiannakakis
kgiannakakis

Reputation: 104198

Create a closure:

{    
    var links = [];
    $(".link").each(function() {
            group += 1;
            text += 1;

            links[group] = [];

            links[group][text] = $(this).val();
        }
    });

    var jsonLinks = $.toJSON(links);
}

Upvotes: 2

raveren
raveren

Reputation: 18539

Just declare it before your block of code:

var links = [];
$(".link").each(function() {
        group += 1;
        text += 1;
        links[group] = [];
        links[group][text] = $(this).val();
    }
});

var jsonLinks = $.toJSON(links);

or simply remove 'var':

$(".link").each(function() {
        group += 1;
        text += 1;
        links = [];
        links[group] = [];
        links[group][text] = $(this).val();
    }
});

var jsonLinks = $.toJSON(links);

Upvotes: 2

Sarfraz
Sarfraz

Reputation: 382881

.

var links = [];

$(".link").each(function() {
        group += 1;
        text += 1;            
        links[group] = [];

        links[group][text] = $(this).val();
    }
});

var jsonLinks = $.toJSON(links);

Upvotes: 2

Related Questions