programmatic menu - disappearing divs

P

Phil N

Hi all.

I've been here before and got a lot of help with my neophyte troubles so I'm
back again.

This time I have a number of questions (if I can remember them all).

(I've pasted the code in question at the end of this message and installed it on
the web at http://www3.telus.net/bikim/test .)

Just for something to do I'm attempting to code a menu system that is as
programmable as I can. The first row, that I call the 'base buttons' works
mostly like I expect it to.

Q1: The problem I am having is that when I click a base button to generate a
column of similar buttons nothing appears. According to the dom inspector the
divs are being created but they just don't appear anywhere that I can find.

Q2: How can I align the text vertically in the div?

Q3: What were the rest of my questions?

------- start of code --------

// FUNCTION :: makeButtons(event)
// this handles the onclick event in a base button
// i.e. onclick = makeButtons
// Use :: supply num 'buttons'
// Receives :: number of buttons to make as int <from button clicked?>
// :: type of container to use
// Returns :: status as bool

function makeButtons(event)
{
// get parent-Button-id
var obj = event.target;
var targetId = obj.id;
var idPostfix = targetId.charAt(1);
var idBase = parseInt(targetId);
//var iD = this.id;
for(var i=0; i<=rows; i++) // get rows from functions.js
{
var bTemp = makeEl('div'); // button temp

bTemp['id'] = (i+idBase+1)+idPostfix; // from variables ???

bTemp.style.position = 'relative';
bTemp.style.left = obj.style.left;
bTemp.style.top = (parseInt(obj.style.top)+(25*(i+1)))+'px';
bTemp.style.width = 100+"px";
bTemp.style.backround = bgImg;
document.getElementById(targetId).appendChild(bTemp);
}

var mesg = '';
// mesg += 'this.id = '+pBid;
mesg += '\ntarget Id = '+targetId;
mesg += '\ntarget Id as int= '+parseInt(targetId);
mesg += '\nbTemp Id = '+bTemp["id"];
mesg += '\nidPostfix = '+idPostfix;
mesg += '\nidBase = '+idBase;
mesg += '\nobj.style.left = '+obj.style.left;
mesg += '\nobj.style.top = '+obj.style.top;
mesg += '\nbTemp.style.top = '+(parseInt(obj.style.top)+25)+'px';

alert('In makeButtons \n'+mesg);
return 'false';
}
// end of FUNCTION :: makeButtons()

---------- End of Code Snippet ----------


Thanks
 
D

Dom Leonard

Phil said:
(I've pasted the code in question at the end of this message and
installed it on the web at http://www3.telus.net/bikim/test .)

Just for something to do I'm attempting to code a menu system that is as
programmable as I can. The first row, that I call the 'base buttons'
works mostly like I expect it to.

Q1: The problem I am having is that when I click a base button to
generate a column of similar buttons nothing appears. According to the
dom inspector the divs are being created but they just don't appear
anywhere that I can find.

Q2: How can I align the text vertically in the div?

Um, "text-align: center;" and line breaks?
This may not be the question :)
------- start of code --------

// FUNCTION :: makeButtons(event)
// this handles the onclick event in a base button
// i.e. onclick = makeButtons
// Use :: supply num 'buttons'
// Receives :: number of buttons to make as int <from button clicked?>
// :: type of container to use
// Returns :: status as bool

function makeButtons(event)
{
// get parent-Button-id
var obj = event.target;
var targetId = obj.id;
var idPostfix = targetId.charAt(1);
var idBase = parseInt(targetId);
//var iD = this.id;
for(var i=0; i<=rows; i++) // get rows from functions.js
{
var bTemp = makeEl('div'); // button temp

bTemp['id'] = (i+idBase+1)+idPostfix; // from variables ???

bTemp.style.position = 'relative';
bTemp.style.left = obj.style.left;
bTemp.style.top = (parseInt(obj.style.top)+(25*(i+1)))+'px';
bTemp.style.width = 100+"px";
bTemp.style.backround = bgImg;

Wrong spelling, should be:

bTemp.style.background = bgImg;


Text color seems to inherit from the value #ffffff set in
applyBaseLabels, so without the background, any text inserted in the
bTemp appears white on white and causes test confusion.
document.getElementById(targetId).appendChild(bTemp);
}
return 'false';

Recall function comment: // Returns :: status as bool

'false' with quotes is a string value, as is 'true'. Both will test
boolean true in a javascript conditional. To return boolean values, omit
the quotes:

return true; // or
return false;
}
// end of FUNCTION :: makeButtons()

Major comment - HTML id values should start with a letter:

<cite>
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be
followed by any number of letters, digits ([0-9]), hyphens ("-"),
underscores ("_"), colons (":"), and periods (".").
</cite>

The code works in Mozilla, but you may wish to look into it.


Good luck,
Dom
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top