Reputation: 329
I am trying out an alternative solution to issue I have been have with showing/hiding individual divs.
I am trying to use the JQUERY UI dropdown menu as a solution the dropdown menu menu works but my click functions are not.
Basically the all divs are hidden onLoad except for chartdiv1, as the user click the menu items then the other divs will show as needed. Your help is greatly appreciated.
my js fiddle. http://jsfiddle.net/Jason1975/qtdojq2g/
HTML
<body onLoad="hide()">
<ul id="menu">
<li><a id="1">Unit Price</a></li>
<li>Unit Price in Alternative Currency
<ul>
<li><a id="2">GSO_EURO</a></li>
<li><a id="3">GSO_GBP</a></li>
<li><a id="4">GSO_ZAR</a></li>
</ul>
</li>
<li>Unit Price Performance over period
<ul>
<li><a id="5">GSO_USD</a></li>
<li><a id="6">GSO_EURO</a></li>
<li><a id="7">GSO_GBP</a></li>
<li><a id="8">GSO_ZAR</a></li>
</ul>
</li>
</ul>
<br /><br />
<!-- Chart Divs -->
<!-- Chartdiv1 - Unit Price in US Dollars -->
<div id="chartdiv1" style="width:100%; height:250px; background: #CCC"">CHARTDIV1 - USD CURRENCY</div><br />
<!-- End Chartdiv1 -->
<!-- Chartdiv2 - EURO Currency -->
<div id="chartdiv2" style="width:100%; height:250px; background: #CCC">CHARTDIV2 - EURO CURRENCY</div><br />
<!-- End Chartdiv2 -->
<!-- Chartdiv3 - GBP Currency -->
<div id="chartdiv3" style="width:100%; height:250px; background: #CCC">CHARTDIV3 - GBP CURRENCY</div><br />
<!-- End Chartdiv3 -->
<!-- Chartdiv4 - ZAR Currency -->
<div id="chartdiv4" style="width:100%; height:250px; background: #CCC">CHARTDIV4 - ZAR CURRENCY</div><br />
<!-- End Chartdiv3 -->
<!-- Chartdiv5 - USD Unit Price Perfomance over a Period -->
<div id="chartdiv5" style="width:100%; height:250px; background: #CCC">CHARTDIV5 - USD PERFORMANCE PERIOD</div><br />
<!-- End Chartdiv5 -->
<!-- Chartdiv6 - EURO Unit Price Perfomance over a Period -->
<div id="chartdiv6" style="width:100%; height:250px; background: #CCC">CHARTDIV6 - EURO PERFORMANCE PERIOD</div><br />
<!-- End Chartdiv6 -->
<!-- Chartdiv7 - GBP Unit Price Perfomance over a Period -->
<div id="chartdiv7" style="width:100%; height:250px; background: #CCC">CHARTDIV7 - GBP PERFORMANCE PERIOD</div><br />
<!-- End Chartdiv7 -->
<!-- Chartdiv8 - ZAR Unit Price Perfomance over a Period -->
<div id="chartdiv8" style="width:100%; height:250px; background: #CCC">CHARTDIV8 - ZAR PERFORMANCE PERIOD</div><br />
<!-- End Chartdiv8 -->
<br>
THE JQUERY
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script type="text/javascript">
$(document).ready(function() {
hide();
$( '#a#1').click( function() {
var $select = $( this );
if ( $select ) {
$( 'div#chartdiv1' ).show();
} else {
$( 'div#chartdiv1' ).hide();
}
});
$( 'a#2' ).click( function() {
var $select = $( this );
if ( $select ) {
$( 'div#chartdiv2' ).show();
} else {
$( 'div#chartdiv2' ).hide();
}
});
$( 'a#3' ).click( function() {
var $select = $( this );
if ( $select ) {
$( 'div#chartdiv3' ).show();
} else {
$( 'div#chartdiv3' ).hide();
}
});
$( 'a#4' ).click( function() {
var $select = $( this );
if ( $select ) {
$( 'div#chartdiv4' ).show();
} else {
$( 'div#chartdiv4' ).hide();
}
});
$( 'a#5' ).click( function() {
var $select = $( this );
if ( $select ) {
$( 'div#chartdiv5' ).show();
} else {
$( 'div#chartdiv5' ).hide();
}
});
$( 'a#6' ).click( function() {
var $select = $( this );
if ( $select ) {
$( 'div#chartdiv6' ).show();
} else {
$( 'div#chartdiv6' ).hide();
}
});
$( 'a#7' ).click( function() {
var $select = $( this );
if ( $select ) {
$( 'div#chartdiv7' ).show();
} else {
$( 'div#chartdiv7' ).hide();
}
});
$( 'a#8' ).click( function() {
var $select = $( this );
if ( $select ) {
$( 'div#chartdiv8' ).show();
} else {
$( 'div#chartdiv8' ).hide();
}
});
});
function hide() {
var show = ['chartdiv1'];
for ( var i = 0; i < show.length; ++i )
document.getElementById(show[i]).style.display = "block";
var hide = ['chartdiv2','chartdiv3','chartdiv4','chartdiv5','chartdiv6','chartdiv7','chartdiv8','hidden','hidden2','currency','currency2'];
for ( var i = 0; i < hide.length; ++i )
document.getElementById(hide[i]).style.display = "none";
}
//END OF ALL THE CHART ITEMS
</script>
Upvotes: 1
Views: 456
Reputation: 5176
Don't know what for I have rewritten code as well, but nevertheless.
<a>
id
is replaced with data-id
, which has id
of target element.<div>
s styles are placed in CSS chartdiv
class styles, including hiding by default.click
event handler is added to <a>
s inside <ul id="menu">
.<div>
s have additional js-chartdiv
class for hide/show handling.JS:
$(document).ready(function()
{
$('.js-chartdiv:first').show();
$('#menu a').on('click', function()
{
$('.js-chartdiv:visible').hide();
$('#' + $(this).data('id')).show();
});
});
HTML:
<ul id="menu">
<li>
<a data-id="chartdiv1">Unit Price</a>
</li>
<li>Unit Price in Alternative Currency
<ul>
<li>
<a data-id="chartdiv2">GSO_EURO</a>
</li>
<li>
<a data-id="chartdiv3">GSO_GBP</a>
</li>
<li>
<a data-id="chartdiv4">GSO_ZAR</a>
</li>
</ul>
</li>
<li>Unit Price Performance over period
<ul>
<li>
<a data-id="chartdiv5">GSO_USD</a>
</li>
<li>
<a data-id="chartdiv6">GSO_EURO</a>
</li>
<li>
<a data-id="chartdiv7">GSO_GBP</a>
</li>
<li>
<a data-id="chartdiv8">GSO_ZAR</a>
</li>
</ul>
</li>
</ul>
<br /><br />
<div id="chartdiv1" class="chartdiv js-chartdiv">CHARTDIV1 - USD CURRENCY</div>
<div id="chartdiv2" class="chartdiv js-chartdiv">CHARTDIV2 - EURO CURRENCY</div>
<div id="chartdiv3" class="chartdiv js-chartdiv">CHARTDIV3 - GBP CURRENCY</div>
<div id="chartdiv4" class="chartdiv js-chartdiv">CHARTDIV4 - ZAR CURRENCY</div>
<div id="chartdiv5" class="chartdiv js-chartdiv">CHARTDIV5 - USD PERFORMANCE PERIOD</div>
<div id="chartdiv6" class="chartdiv js-chartdiv">CHARTDIV6 - EURO PERFORMANCE PERIOD</div>
<div id="chartdiv7" class="chartdiv js-chartdiv">CHARTDIV7 - GBP PERFORMANCE PERIOD</div>
<div id="chartdiv8" class="chartdiv js-chartdiv">CHARTDIV8 - ZAR PERFORMANCE PERIOD</div>
CSS:
.ui-menu
{
width: 250px;
font-weight: 300;
font-size: 10px;
}
.chartdiv
{
width: 100%;
height: 250px;
background: #CCC;
display: none;
}
Upvotes: 1
Reputation: 896
See try to reuse the code this is script for all you need
$(document).ready(function() {
$('.chart').hide();
$( 'div#chartdiv1' ).show();
$('.showchart').click( function() {
$('.chart').hide();
$('#' + $(this).attr('data-chart')).show();
});
});
now 2 changes in html your link should be like
<a class="showchart" data-chart="chartdiv1">Unit Price</a>
we have added class and data-chart attribute
now in chart div
<div id="chartdiv1" class="chart" style="width:100%; height:250px; background: #CCC">
add class chart
and try this
let me know this works for you or not ?
Upvotes: 1