473,387 Members | 1,463 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

Why does IE6 require a doulbeclick for an onclick event to activate full code?



sorry about that,

This is the event handling element:

<div id="menu">
<ul>
<li>....
<li><a
href="javascript:expand_menu(document.getElementBy Id('extend'))"
id="extend">Text <img src="" id="arrow" src="arro-u.gif"</a>
<ul>
<li>......</li>....</ul></div>

Once that linked is clicked on, it's supposed to expand the menu
below, as well as swap the image, simultaneously.
It's what happens in FF. But in IE it takes 2 clicks, one for the
image to swap, another for the menu to expand. But only on the first
click. On any subsequent clicks, only one click is needed for both
functions to fire even in IE. But now the image displayed is the wrong
one.

These are the functions:

onload=function()
{document.getElementById("menu").getElementsByTagN ame("ul")
[1].setAttribute("style","display:none;")
} //just to ensure the inline style attribute, don't remember why it
was necessary
function swap_img() { //function to swap the image inside the <a>

m=document.images.arrow;
if(m.src.indexOf("arrow-u")>0) {
m.src=m.src.replace(/arrow-u/,"arrow-d");
}
else {
m.src=m.src.replace(/arrow-d/,"arrow-u");
}
}

function expand_menu(node) { //function to expand the menu div
drop=node.parentNode || node.parentElement;
kids=drop.childNodes[2];
if(kids.nodeName.toLowerCase()=="ul"&&kids.style.d isplay=="none") {
kids.style.display="block";
}
else {
kids.style.display="none";
}

swap_img(); //the image swap function above is called from this
function

}
Hope that wasn't too cluttered:) thanks for any help.

Feb 7 '07 #1
2 1943
On Feb 7, 11:45 am, "webdeveloper" <augustsham...@hotmail.comwrote:
sorry about that,

This is the event handling element:

<div id="menu">
<ul>
<li>....
<li><a
href="javascript:expand_menu(document.getElementBy Id('extend'))"
id="extend">Text <img src="" id="arrow" src="arro-u.gif"</a>
Do not insert script into a link's href attribute, it causes problems
with IE (as you've discovered) and is a bad design choice. Use a
meaningful href attribute and move the code to an onclick handler. If
there is no suitable href value, don't use a link, use some other
element and style it to appear like a clickable element.

Also, you are using getElementById to get a reference back to the same
element. Just pass 'this' to the function (which means you probably
don't need the ID at all):

<li><a href="" id="extend" onclick="expand_menu(this)">Text <img
src="" id="arrow" src="arro-u.gif"</a>

<ul>
<li>......</li>....</ul></div>

Once that linked is clicked on, it's supposed to expand the menu
below, as well as swap the image, simultaneously.
It's what happens in FF. But in IE it takes 2 clicks, one for the
image to swap, another for the menu to expand. But only on the first
click. On any subsequent clicks, only one click is needed for both
functions to fire even in IE. But now the image displayed is the wrong
one.

These are the functions:

onload=function()
{document.getElementById("menu").getElementsByTagN ame("ul")
[1].setAttribute("style","display:none;")
} //just to ensure the inline style attribute, don't remember why it
was necessary
If you are going to use script to reveal the menu items, it is good
practice to hide them using script in the first place, otherwise users
without scripting won't be able to use the menu. Therefore browser-
friendly collapsible menus will ensure that they work without any
scripting and add all the script stuff (classes for "clickable"
elements, collapsing the tree, etc.) only if appropriate support is
detected.

You can also do most of the hiding, showing and image swaps by
toggling a CSS class rather than explicitly via script. Make the
arrow-d image and display:none part of a "hide" class, and arrow-u and
display:default part of a "show" class. Then just toggle the class of
the UL.
[...]
>
if(kids.nodeName.toLowerCase()=="ul"&&kids.style.d isplay=="none") {
kids.style.display="block";
}
else {
kids.style.display="none";
}
You can replace the entire if block if you write this toggle as:

if(kids.nodeName.toLowerCase()=="ul") {
kids.style.display = (kids.style.display == 'none')? '' : 'none';
}
Use a similar function to swap the className.
--
Rob

Feb 7 '07 #2
On Feb 6, 7:07 pm, "RobG" <r...@iinet.net.auwrote:
On Feb 7, 11:45 am, "webdeveloper" <augustsham...@hotmail.comwrote:
sorry about that,
This is the event handling element:
<div id="menu">
<ul>
<li>....
<li><a
href="javascript:expand_menu(document.getElementBy Id('extend'))"
id="extend">Text <img src="" id="arrow" src="arro-u.gif"</a>

Do not insert script into a link's href attribute, it causes problems
with IE (as you've discovered) and is a bad design choice. Use a
meaningful href attribute and move the code to an onclick handler. If
there is no suitable href value, don't use a link, use some other
element and style it to appear like a clickable element.

Also, you are using getElementById to get a reference back to the same
element. Just pass 'this' to the function (which means you probably
don't need the ID at all):

<li><a href="" id="extend" onclick="expand_menu(this)">Text <img
src="" id="arrow" src="arro-u.gif"</a>
<ul>
<li>......</li>....</ul></div>
Once that linked is clicked on, it's supposed to expand the menu
below, as well as swap the image, simultaneously.
It's what happens in FF. But in IE it takes 2 clicks, one for the
image to swap, another for the menu to expand. But only on the first
click. On any subsequent clicks, only one click is needed for both
functions to fire even in IE. But now the image displayed is the wrong
one.
These are the functions:
onload=function()
{document.getElementById("menu").getElementsByTagN ame("ul")
[1].setAttribute("style","display:none;")
} //just to ensure the inline style attribute, don't remember why it
was necessary

If you are going to use script to reveal the menu items, it is good
practice to hide them using script in the first place, otherwise users
without scripting won't be able to use the menu. Therefore browser-
friendly collapsible menus will ensure that they work without any
scripting and add all the script stuff (classes for "clickable"
elements, collapsing the tree, etc.) only if appropriate support is
detected.

You can also do most of the hiding, showing and image swaps by
toggling a CSS class rather than explicitly via script. Make the
arrow-d image and display:none part of a "hide" class, and arrow-u and
display:default part of a "show" class. Then just toggle the class of
the UL.

[...]
if(kids.nodeName.toLowerCase()=="ul"&&kids.style.d isplay=="none") {
kids.style.display="block";
}
else {
kids.style.display="none";
}

You can replace the entire if block if you write this toggle as:

if(kids.nodeName.toLowerCase()=="ul") {
kids.style.display = (kids.style.display == 'none')? '' : 'none';

}

Use a similar function to swap the className.

--
Rob


Thanks for the attention. I'm going to try it. Not quite sure if i
used <a onclick="" initially, and changed it later for some reason,
but will try and see anyway.
I'm planning on placing menu links elsewhere on the page, so non-
javascript users should be ok. Thanks! Hope it works

Feb 8 '07 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: BigDadyWeaver | last post by:
I am using the following code in asp to define a unique and unpredictable record ID in Access. <% 'GENERATE UNIQUE ID Function genguid() Dim Guid guid =...
4
by: pete | last post by:
I found it in the view source of a corporate website. <script Language="Javascript"> <!-- var keyMacro= ]; //--> </script>
53
by: usenet | last post by:
See <ul> <li><a name="link1" onClick="alert(this.name);return false;" href="#">Link1</a></li> <li><a name="link2" href="javascript:alert(this);">Link2</a></li> <li>Item 3</li> </ul> ...
9
by: MLH | last post by:
Say I open a form (MyForm) in design view, then I close it and dbl-click it in the database window to open it. Shouldn't the Activate event occur in all such situations? What might the case(s) be...
1
by: webdeveloper | last post by:
An onclick event that activates two functions: one that expands a menu, another that swaps an image in the same menu hierarchy; in FF, only one click is required to both swap the image and expand...
7
by: mavigozler | last post by:
IE7 does not appear to set an event on contained text inside SPAN elements whose 'onclick', 'onmouseover', and 'onmouseout' events, defying the HTML recommendation. Firefox appears to conform. ...
2
by: rathour | last post by:
<?php session_start(); require_once('db.php'); include('functions.php'); $user = get_username ( $_SESSION ); //if ( $_SESSION ): checkLogin ( '1 2' ); ?>
5
by: Aaron Gray | last post by:
Here's a big issue, does IE8 support 'this' properly on events now ? It certainly confuses things if it does ! Aaron
2
by: bips2008 | last post by:
The code seems to work fine in other browser but in IE it throws this error. This is very urgent for me and any help would be greatly appreciated For your convienence i have posted the code for the...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.