I’m sure there must be a really simple answer to this, but at the risk of sounding stupid- I can’t get this switch statement to work. The input var, ‘status’ can be either ‘public’ or ‘draft’, and I can assure you it is only holding one of those two values as I have alerted it out at various stages, and anyway, the if statement here works. Take a look:
function switch_status(status){
if (status == 'public'){
return false;
} if (status == 'draft') {
return true;
}
^This works, but replacing the ‘if’ with this ‘switch’ statement below doesn’t work.
switch(status){
case 'public':
return false;
case 'draft':
return true;
}
}
The first one to provide me with the inevitable embarrassingly simple answer wins my accolade!
EDIT: Here is my full code-
$('.status').live('click',
function(){
fullClass = $(this).attr('class');
id = fullClass.split(' ').slice(-1);
status = fullClass.split(' ').slice(-2,-1);
var newStatus = switch_status(status);
alert(newStatus);
});
function switch_status(status){
// if (status == 'public'){
// return false;
// } if (status == 'draft') {
// return true;
// }
switch(status){
case 'public':
return false;
case 'draft':
return true;
}
}
You’re passing
statusas an array of one string (the result ofslice) rather than as just a string.When you check equality between your array and your string, it appears that coercion is causing the equality check to work. But coercion doesn’t happen in a switch statement.
If I change
to
then it works fine.