Fine goals from Brad Potts and Mamadou Thiam put the Reds in control in the first 15 minutes before Ben Reeves made a game of it in the second half.
But the Reds held on to climb above their opponents in the table and up to fourth.
They enjoyed a perfect start as they took a fourth-minute lead when Thiam teed up Potts to smash an unstoppable shot past Jed Steer.
Steer had to be alert to save Cameron McGeehan's 25-yard drive, but he could do nothing about Thiam's effort in the 14th minute.
Police incident Woodhouse Sheffield: Two men and a woman injured after large fight breaks out on Market Square
Sheffield fire: Crews tackle blaze in Wharncliffe Woods near Oughtibridge as heatwave continues
Sheffield fire: Video shows firefighters battling blaze at Wharncliffe Woods near Oughtibridge
Sheffield Crown Court: Here are the biggest cases from the last week including paedophile sting
Sheffield father poured petrol over daughter and tried to set her on fire
The attacker drilled a shot from distance into the left-hand corner as the Addicks were shell-shocked.
Reeves made it a nervy final 15 minutes when he produced a clinical finish but the visitors were unable to force an equaliser.
And they ended the game with 10 men as Chris Solly was sent-off in stoppage time following a second booking.
Barnsley: Davies, Pinnock, Lindsay, McGeehan, Cavare, Potts (Dougall 77), Bahre (Brown 70), Pinillos, Woodrow, Thiam (Hedges 87), Mowatt.
Subs: Greatorex, Moncur, Jackson, Adeboyejo.
Charlton: Steer, Dijksteel, Bielik, Bauer, Pearce (Stevenson 65), Marshall (Hackett-Fairchild 81), Taylor, Reeves, Pratley (Fosu 60), Grant, Solly.
Subs: Phillips, Sarpong-Wiredu, Morgan, Ajose.
Referee: Darren Bond
Attendance: 11, 978