Reputation: 31501
I seem to have a problem with objects' properties' scope. I would like to output each of the Message
objects' title
and message
properties to a select
element, but it is Not Working! What am I doing incorrectly
<html><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
function Message(title, message) {
this.title=title;
this.message=message;
this.getTitle = function(){
return this.title;
};
this.getMessage = function(){
return this.message;
};
}
var messages = new Array(
new Message("First Title", "This is the first message"),
new Message("Second Title", "This is another message")
);
function updateSelect () {
$("#cannedMessages_button").empty();
for (c in messages) {
// First try, with getters and setters
$("#cannedMessages_button").append($('<option>', { value : c.getMessage() , text : c.getTitle() }));
// Second try, directly
$("#cannedMessages_button").append($('<option>', { value : c.message , text : c.title }));
}
}
updateSelect();
});
</script>
</head><body>
<form><select id="cannedMessages_button"></select></form>
</body></html>
I can verify that the foreach is in fact running two iterations, but I cannot get the values out of the objects.
Upvotes: 0
Views: 277
Reputation: 41533
the syntax for the for in
loop in js is :
for(var key in obj)
{
var currentElement = obj[key];
}
Upvotes: 0
Reputation: 120268
don't use for (c in messages
).
in
is for iterating over properties of an object, not for iterating over values in an array.
Use the tried and true
for(var i = 0; i < messages.length; i++) {
...
}
Also, you are not putting your getTitle
and getMessage
methods on a prototype, which is kind of wasteful.
Upvotes: 1