Reputation: 1143
i have the following code :
$(document).ready(function () {
for (i = 1; i <= number_of_banners; i++) {
var selector = "#link_" + i;
$(selector).click(function () {
alert(i);
});
}
});
but the alert() can't get the "i" variable from the for loop. How can I use the i variable of for loop inside the .click function ?
Upvotes: 3
Views: 8889
Reputation: 103
you can use this code :
$(document).ready(function () {
for (var i = 1; i <= number_of_banners; i++) {
var selector = "#link_" + i;
$(selector).on('click', {id: i}, function (e) {
alert(e.data.id);
});
}
});
you should use on
method and use click argument in it instead of using onclick
method
Upvotes: 5
Reputation: 32900
Might this happen be due the fact of the JavaScript hoisting JavaScript Scoping mechanism??
For instance:
doesn't work as JavaScript uses function scope rather than block scope as we're usually accustomed from other languages like Java and C#. In order to make it work, one has to create a new scope by explicitly creating a new anonymous function which then binds the according variable:
I know this doesn't directly answer the question above, but might still be useful though for others stumbling over this question.
Upvotes: 3
Reputation: 87073
Using jQuery .on(event, data, handler) you can do it easily.
$(document).ready(function () {
for (var i = 1; i <= number_of_banners; i++) {
var selector = "#link_" + i;
$(selector).on('click', {id: i}, function (e) {
alert(e.data.id);
});
}
});
Upvotes: 4
Reputation: 9031
a quick solution would be to use the eventData and store the current i
in that:
$(document).ready(function () {
for (var i = 1; i <= number_of_banners; i++) {
var selector = "#link_" + i;
$(selector).bind('click', i, function (e) {
alert(e.data);
});
}
});
if you are using jquery 1.7+ then use on instead of bind
Upvotes: 1
Reputation: 1114
I think you can pass it as a parameter into the anonymous function as long as the function is declared within a scope that can access i.
function (i) {
alert(i);
}
Upvotes: 1