I have this object:
function formBuddy() { var fields = new Array(); var labels = new Array(); var rules = new Array(); var count=0; this.addField = function(field, label, rule) { fields[count] = field; labels[field] = label; rules[field] = rule; count = ++count; } }
Its used in this way:
var cForm=new formBuddy(); cForm.addField("c_first_name","First Name","required"); cForm.addField("c_last_name","Last Name","required");
The problem is, in the addField()
function the fields
array is being set correct (perhaps because a numerical index is being used to refer to it) but the other 2 arrays (labels
and rules
) aren’t being touched at all. Doing a console.log
shows them as empty in firebug.
What do I need to change to make them work? I’d still like to refer to the rules and labels by the string index of the field.
Advertisement
Answer
Use objects instead:
function formBuddy() { var fields = {}; var labels = {}; var rules = {}; var count = 0; this.addField = function(field, label, rule) { fields[count] = field; labels[field] = label; rules[field] = rule; count++; } }
But as Christoph already mentioned, I would store this information in a single data structure too. For example:
function formBuddy() { var fields = {}; this.addField = function(name, label, rule) { fields[name] = { name: name, label: label, rule: rule }; }; this.getField = function(name) { return fields[name]; }; } var cForm=new formBuddy(); cForm.addField("c_first_name","First Name","required"); cForm.addField("c_last_name","Last Name","required"); alert(cForm.getField("c_last_name").label);