Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
104
rated 0 times [  106] [ 2]  / answers: 1 / hits: 20760  / 14 Years ago, wed, september 1, 2010, 12:00:00

I have the following code in Javascript:



jQuery(document).ready(function(){
var actions = new Object();
var actions;
actions[0] = 'create';
actions[1] = 'update';
for (key in actions) {
// Dialogs
var actions[key]+Dialog = function(){
$('#'+actions[key]+'dialog').dialog('destroy');
$('#'+actions[key]+'dialog').dialog({
resizable: false,
height:600,
width:400,
modal: true,
buttons: {
Cancel: function() {
$(this).dialog('close');
}
}
});
};
}
});


I want to create 2 functions in loop(createDialog and updateDialog). How can i do this? In PHP there is very simple $$var. But how make variable variable in JS I don't know.



Thank you


More From » variables

 Answers
25

Like this:



actions[key + Dialog] = function () { ... };


However, since Javascript functions capture variables by reference, your code will not work as intended.

You need to define the inner function inside of a separate function so that each one gets a separate key variable (or parameter).



For example:



var actionNames = [ 'create', 'update' ];   //This creates an array with two items
var Dialog = { }; //This creates an empty object

for (var i = 0; i < actionNames.length; i++) {
Dialog[actionNames[i]] = createAction(actionNames[i]);
}

function createAction(key) {
return function() { ... };
}


You can use it like this:



Dialog.create(...);


EDIT



You are trying to pollute the global namespace with multiple dialog-related functions.

This is a bad idea; it's better to organize your functions into namespace.



If you really want to polute the global namespace, you can do it like this:



var actionNames = [ 'create', 'update' ];   //This creates an array with two items

for (var i = 0; i < actionNames.length; i++) {
this[actionNames[i] + 'Dialog'] = createAction(actionNames[i]);
}


This will create to global functions called createDialog and updateDialog.

In a normal function call, the this keyword refers to the global namespace (typically the window object).


[#95738] Sunday, August 29, 2010, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
monetm

Total Points: 615
Total Questions: 103
Total Answers: 119

Location: Finland
Member since Fri, Oct 21, 2022
2 Years ago
monetm questions
Fri, Feb 26, 21, 00:00, 3 Years ago
Wed, Sep 9, 20, 00:00, 4 Years ago
Sun, Jul 26, 20, 00:00, 4 Years ago
Thu, Jun 11, 20, 00:00, 4 Years ago
;