Jump to content

[SOLVED] Extending Menu Script


Brian W

Recommended Posts

I am having problems with my Extending menu script. I got the script from http://javascript.internet.com/navigation/expanding-menu.html, I would put this in third party scripts, but there isn't a board for third party JS.

Here is where it is being implemented http://www.recruitdonors.com/index.html

In IE (no problems in Firefox) the menu mostly works but the menu selection -OFFICE SUPPLIES- does not work. See the link to the site and the source code (the index page is not PHP, it is plain HTML) and please see

http://www.recruitdonors.com/menu.js

for the javascript or below.

/* This script and many more are available free online at
The JavaScript Source :: http://javascript.internet.com
Created by: Travis Beckham :: http://www.squidfingers.com | http://www.podlob.com
version date: 06/02/03 :: If want to use this code, feel free to do so,
but please leave this message intact. (Travis Beckham) */
// Node Functions
if(!window.Node){
  var Node = {ELEMENT_NODE : 1, TEXT_NODE : 3};
}

function checkNode(node, filter){
  return (filter == null || node.nodeType == Node[filter] || node.nodeName.toUpperCase() == filter.toUpperCase());
}

function getChildren(node, filter){
  var result = new Array();
  var children = node.childNodes;
  for(var i = 0; i < children.length; i++){
    if(checkNode(children[i], filter)) result[result.length] = children[i];
  }
  return result;
}

function getChildrenByElement(node){
  return getChildren(node, "ELEMENT_NODE");
}

function getFirstChild(node, filter){
  var child;
  var children = node.childNodes;
  for(var i = 0; i < children.length; i++){
    child = children[i];
    if(checkNode(child, filter)) return child;
  }
  return null;
}

function getFirstChildByText(node){
  return getFirstChild(node, "TEXT_NODE");
}

function getNextSibling(node, filter){
  for(var sibling = node.nextSibling; sibling != null; sibling = sibling.nextSibling){
    if(checkNode(sibling, filter)) return sibling;
  }
  return null;
}
function getNextSiblingByElement(node){
        return getNextSibling(node, "ELEMENT_NODE");
}

// Menu Functions & Properties

var activeMenu = null;

function showMenu() {
  if(activeMenu){
    activeMenu.className = "";
    getNextSiblingByElement(activeMenu).style.display = "none";
  }
  if(this == activeMenu){
    activeMenu = null;
  } else {
    this.className = "active";
    getNextSiblingByElement(this).style.display = "block";
    activeMenu = this;
  }
  return false;
}

function initMenu(){
  var menus, menu, text, a, i;
  menus = getChildrenByElement(document.getElementById("menu"));
  for(i = 0; i < menus.length; i++){
    menu = menus[i];
    text = getFirstChildByText(menu);
    a = document.createElement("a");
    menu.replaceChild(a, text);
    a.appendChild(text);
    a.href = "#";
    a.onclick = showMenu;
    a.onfocus = function(){this.blur()};
  }
}

if(document.createElement) window.onload = initMenu;

Internet explore tells me this

Line: 79

Char: 5

Error: Invalid Argument.

Code: 0

URL: http://www.recruitdonors.com/

I looked at line 79, it makes a little since since that is the end of the non working menu item.

  <li>OFFICE SUPPLIES
<ol>
	<div align="right"><a href="writing.php">WRITTING SUPPLIES</a></div>
        <div align="right"><a href="flashdrives.php">FLASH DRIVES</a></div>
        <div align="right"><a href="cardholder.php">CARD HOLDERS</a></div>
LINE79->></ol>
  </li>

BTW, I modified the script from having <li>'s to having divs...

The odd thing is that the other menu item that extends does work and the whole thing works in firefox.

Firebug reports

uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMHTMLLIElement.replaceChild]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://www.recruitdonors.com/menu.js :: initMenu :: line 78" data: no]

That is

function initMenu(){
  var menus, menu, text, a, i;
  menus = getChildrenByElement(document.getElementById("menu"));
  for(i = 0; i < menus.length; i++){
    menu = menus[i];
    text = getFirstChildByText(menu);
    a = document.createElement("a");
Line 78->>menu.replaceChild(a, text);
    a.appendChild(text);
    a.href = "#";
    a.onclick = showMenu;
    a.onfocus = function(){this.blur()};
  }

Any input greatly appreciated including "debugging software" recommendations, techniques, a solution, ect.

Thank you.

Link to comment
Share on other sites

lol, I fixed it. Sorry, i'll say solved. BTW, it was a F***ing space, as in white space between a word and </a>... no kidding you. Thats what caused the problem. Not js, not my php, not even a good excuse for an error. I hate js, love what I can do with it.

 

Thanks anyways though. Appreciate you coming back and looking at it for me.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.