The hosts – who had won one of their previous 17 league games – took an early lead then doubled it in first half stoppage time before Cauley Woodrow pulled one back with 20 minutes left.
The second-bottom visitors hit the frame of the goal three times and were the better team in open play but were caught out by set pieces.
Gerhard Struber made two changes from the team that lost in the FA Cup at Portsmouth a week ago, with injured pair Marcel Ritzmaier and Brad Collins replaced by Sami Radlinger and Alex Mowatt, while Elliott Simoes and Jack Walton were brought onto the bench.
The hosts took the lead in the ninth minute when a free-kick was flicked on by the head of Jason Pearce for the unmarked Lyle Taylor who volleyed into the bottom right corner from close range.
The Reds came very close to levelling midway through the first half when Clarke Oduor’s impressive left-wing free-kick was headed towards goal by Mads Andersen but goalkeeper Dillon Phllips brilliantly clawed the ball out of his bottom right corner then Aapo Halme hit the post from a tight angle two yards out.
Those were the only chances in the first 45 minutes, other than a few harmless long-range efforts at either end, as Charlton had a territorial advantage without looking dangerous from open play.
Another set piece undid Barnsley just before the break when Alfie Doughty’s right-wing corner was headed by Pearce to Naby Sarr who swung at the ball from six yards out but miskicked and it fell perfectly for the unmarked Andre Green who smashed in from 12 yards out.
The hosts nearly added a third set piece goal in the first minute of the second half when Josh Cullen’s corner was headed towards goal at the back post by Darren Pratley but Sami Radlinger stopped it on his line.
Barnsley were agonisingly close to pulling one back when Andersen’s long-range shot was blocked by the chest of Phillips then Cauley Woodrow smashed the rebound against the top of the left post from 14 yards out. Charlton’s Cullen then glanced a header from Green’s cross well wide.
Struber made a double change midway through the second half with full-backs Jordan Williams and Oduor being replaced by Simoes and Kilian Ludewig who played as a right wing-back with Brown the left wing-back in a 3-5-2 which matched Charlton’s formation.
Woodrow was moved up front and soon pulled a goal back as Thomas, who was playing in central midfield, ran from near halfway and played in his team-mate who smashed the ball across Phillips and in from the left of the box for his 11th of the season.
It was so nearly 2-2 four minutes later as Brown turned in the box before smashing a shot from 15 yards off the crossbar then Ludewig’s effort from the edge of the box looked destined for the bottom left corner before being cleared off the line. That was to be the visitors’ final chance.
Barnsley (4-4-2 diamond): Radlinger; J Williams (Ludewig 68mins), Sollbauer, Andersen, Oduor (Simoes 68); Halme, Mowatt, Thomas, Woodrow; Chaplin (Schmidt 85), Brown Unused: Walton, B Williams, Dougall, Styles, Schmidt. Yellow cards: Sollbauer, Andersen, Chaplin, J Williams. Goals: Woodrow 70.
Charlton (3-5-2): Phillips; Lockyer, Pearce, Sarr; Matthews Pratley, Cullen, Williams (Forster-Caskey 58mins), Doughty (Purrington 90); Green, Taylor (Hemed 68). Unused: Amos, McGeady, Field, Oztumer. Yellow cards: Lockyer. Goals: Taylor 9, Green 45+2.
-
13:55pm
-
-
15:03pm
-
15:04pm
-
15:07pm
-
15:08pm
-
15:08pm
-
15:09pm
-
15:09pm
-
15:10pmGOAL!
-
15:11pm
-
15:12pm
-
15:13pm
-
15:15pm
-
15:17pm
-
15:17pm
-
15:18pm
-
15:19pm
-
15:20pm
-
15:20pm
-
15:23pm
-
15:24pm
-
15:24pm
-
15:28pm
-
15:29pm
-
15:32pm
-
15:34pmYELLOW CARD
-
15:35pm
-
15:36pm
-
15:36pm
-
15:40pm
-
15:41pm
-
15:42pmYELLOW CARD
-
15:44pm
-
15:47pm
-
15:48pm
-
15:49pmGOAL!
-
15:51pm
-
15:51pm
-
15:52pm
-
16:07pm
-
16:07pm
-
16:09pm
-
16:11pm
-
16:14pm
-
16:14pm
-
16:17pm
-
16:18pm
-
16:21pmYELLOW CARD
-
16:23pmYELLOW CARD
-
16:23pm
-
16:27pm
-
16:27pm
-
16:29pm
-
16:29pm
-
16:30pm
-
16:32pmGOAL!
-
16:33pm
-
16:36pm
-
16:39pm
-
16:41pm
-
16:44pm
-
16:45pm
-
16:46pm
-
16:46pm
-
16:47pm
-
16:50pm
-
16:50pm
-
16:51pm
-
16:53pm
-
16:54pm
-
16:54pm
-
16:55pm
-
16:57pm
-
16:58pm
-
16:58pm