this is a classic question but can't find the best approach. I have a dropdown with id project_billing_code_id and 3 values (1, 2, 3).
If value selected = 1 then show div with id one and only this one. div two and three must be hidden. I also want to make this happen when view is loaded so not only on change.
$(document).ready(function() {
$("#hourly").hide();
$("#per_diem").hide();
$("#fixed").hide();
$("#project_billing_code_id").change(function() {
if ($("#project_billing_code_id").val() == '1') {
$("#hourly").show();
}
else if ($("#project_billing_code_id").val() == '2') {
$("#per_diem").show();
}
else if ($("#project_billing_code_id").val() == '3') {
$("#fixed").show();
}
else {
$("#hourly").hide();
$("#per_diem").hide();
$("#fixed").hide();
}
});
});
You were close. You probably want a few small tweaks to the behaviours to make sure all the divs hide and that correct div is showing on page load.
Have a play with the code here: http://jsfiddle.net/irama/ZFzrA/2/
Or grab the updated JS code here:
hideAllDivs = function () {
$("#hourly, #per_diem, #fixed").hide();
};
handleNewSelection = function () {
hideAllDivs();
switch ($(this).val()) {
case '1':
$("#hourly").show();
break;
case '2':
$("#per_diem").show();
break;
case '3':
$("#fixed").show();
break;
}
};
$(document).ready(function() {
$("#project_billing_code_id").change(handleNewSelection);
// Run the event handler once now to ensure everything is as it should be
handleNewSelection.apply($("#project_billing_code_id"));
});
Let us know how you go!
dont use hide from document.ready as it has to wait for the dom to load. Add an inline style="display:none;"
drop the $("#project_billing_code_id") assignments inside your if statement and use this instead as you already have access to the dom element via the event handler, use $(this).val() or this.val(). Also make your code reusable so you can call it from different scripts.
var PayRate = (function(){
var _obj = {};
var hideShow = function(elem){
if($(elem).val() === '1'){
$("#hourly").show();
}else if($(elem).val() === '2'){
$("#per_diem").show();
}else if($(elem).val() === '3'){
$("#fixed").show();
}else{
$("#hourly, #fixed, #per_diem").hide();
}
};
_obj.checkValue = function(){
hideShow($('#project_billing_code_id'))
};
var events = function(){
$('#project_billing_code_id').change(function(){
hideShow(this);
});
};
$(document).ready(function(){
events ();
checkValue ();
});
return _obj;
}());
I have not tested the above so you might need to make a few changes. I think you get the idea though. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With