|
-
Jun 15th, 2004, 03:01 PM
#1
Thread Starter
Frenzied Member
hide/show div [Resolved]
The call to the function:
PHP Code:
echo "<select name=drange size=1 onChange=\"checkd()\">";
if(isset($_GET['drange']))
{
echo "<option value=" . $_GET['drange'] . ">" . $_GET['drange'] . "</option>";
echo "<option value=ytd>Year To Date</option>";
}
else
echo "<option value=ytd selected>Year To Date</option>";
echo "<option value=all>All Dates</option>";
echo "<option value=range>Range Of Dates</option>";
echo "</select>";
Here's my function:
Code:
var browserType;
if (document.layers) {browserType = "nn4"}
if (document.all) {browserType = "ie"}
if (window.navigator.userAgent.toLowerCase().match("gecko")) {browserType= "gecko"}
function checkd()
{
if(document.dform.drange.options[document.dform.drange.selectedIndex].value != "range")
{
if (browserType == "gecko" )
{
document.poppedLayer = eval('document.getElementById(\'from\')');
document.poppedLayer = eval('document.getElementById(\'to\')');
}
else if (browserType == "ie")
{
document.poppedLayer = eval('document.all[\'from\']');
document.poppedLayer = eval('document.all[\'to\']');
}
else
{
document.poppedLayer = eval('document.layers[\'`from\']');
document.poppedLayer = eval('document.layers[\'`to\']');
}
document.poppedLayer.style.visibility = "hidden";
}
else
{
if (browserType == "gecko" )
{
document.poppedLayer = eval('document.getElementById(\'from\')');
document.poppedLayer = eval('document.getElementById(\'to\')');
{
else if (browserType == "ie")
{
document.poppedLayer = eval('document.all[\'from\']');
document.poppedLayer = eval('document.all[\'to\']');
}
else
{
document.poppedLayer = eval('document.layers[\'`from\']');
document.poppedLayer = eval('document.layers[\'`to\']');
}
document.poppedLayer.style.visibility = "visible";
}
}
Here is the second div:
Code:
<div id="to" style="position:relative; z-index:1; visibility: hidden">
<?php
if(isset($_GET['to']))
echo "To: <input type=text name=to size=12 maxlength=10 value=" . $_GET['to'] . "> ";
else
echo "To: <input type=text name=to size=12 maxlength=10> ";
?>
<A HREF="#" onClick="cal1good.select(document.dform.to,'anchor2','MM/dd/yyyy'); return false;" NAME="anchor2" ID="anchor2">select</A>
<layer></layer></div>
It's not working. When I change it to the correct option, it's not doing the hide/show. I know this is a lot of code, but it's really simple when you really look at it. Am I doing something wrong?
Last edited by ober0330; Jun 16th, 2004 at 08:54 AM.
-
Jun 16th, 2004, 03:42 AM
#2
You have unnecessary browser detection and serious quote problems, unless the board messed up the latter. You also have unnecessary evals.
Further, the name attribute isn't sufficient to identify an element in Gecko, you need to set the id attribute for that. I consider it a mistake that IE allows the name attribute for getElementById. Actually IE might get confused by the div with id=to and the input with name=to.
You have two subsequent assignments to the same variable, thus making the first one unnecessary.
And what is the layer tag doing there?
If you're debugging JavaScript, use Mozilla's JS console, it gives far more meaningful messages than IE.
All the buzzt
 CornedBee
"Writing specifications is like writing a novel. Writing code is like writing poetry."
- Anonymous, published by Raymond Chen
Don't PM me with your problems, I scan most of the forums daily. If you do PM me, I will not answer your question.
-
Jun 16th, 2004, 07:14 AM
#3
Thread Starter
Frenzied Member
Well, I got that function off of another website and tweaked it just a little to use 2 divs.
I have no idea why the layer tag is in there... it was in the example I found and I figured it was necessary, despite my better logic.
This is for internal stuff, so I don't even need to check for Gecko stuff... everyone is using Netscape and IE.
Should I do one div at a time, making it visible/hidden, before doing the second div?
And as far as I know, the quotes are all as they are in my code... posting didn't alter them.
I'm fairly new to javascript, so any help would be appreciated.
-
Jun 16th, 2004, 08:02 AM
#4
Ok...
This:
document.poppedLayer = eval('document.all['from']');
document.poppedLayer = eval('document.all['to']');
is the most problematic part.
First, the evals are, as I said, unnecessary. This also solves the quote problem.
document.poppedLayer = document.all['from'];
document.poppedLayer = document.all['to'];
Now, you're still assigning twice to the same variable. The second assignment simply overrides the first.
What you need, therefore, is two variables:
document.poppedLayer1 = document.all['from'];
document.poppedLayer2 = document.all['to'];
Of course then you need to adjust this:
document.poppedLayer.style.visibility = "hidden";
to
document.poppedLayer1.style.visibility = "hidden";
document.poppedLayer2.style.visibility = "hidden";
Further along, there's unnecessary code repeat, easily avoidable by restructuring. Not to mention that browser detection is stupid, object detection is far better:
Code:
if(document.getElementById) {
document.poppedLayer1 = document.getElementById('from');
document.poppedLayer2 = document.getElementById('to');
} else if(document.all) {
document.poppedLayer1 = document.all['from'];
document.poppedLayer2 = document.all['to'];
} else if(document.layers) {
document.poppedLayer1 = document.layers['from'];
document.poppedLayer2 = document.layers['to'];
}
var sel = document.dform.drange;
var vis = sel.options[sel.selectedIndex].value != "range" ? "hidden" : "visible";
document.poppedLayer1.style.visibility = vis;
document.poppedLayer2.style.visibility = vis;
All the buzzt
 CornedBee
"Writing specifications is like writing a novel. Writing code is like writing poetry."
- Anonymous, published by Raymond Chen
Don't PM me with your problems, I scan most of the forums daily. If you do PM me, I will not answer your question.
-
Jun 16th, 2004, 08:54 AM
#5
Thread Starter
Frenzied Member
Perfect. I really need to buy a Javascript book or spend some time looking over this stuff. 
edit: And thank you.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|