Charlton kept their dreams of European football alive by inflicting Everton's first home defeat since October.
Matt Holland lashed home a superb half-volley in first-half stoppage time after Hermann Hreidarsson's mis-hit cross proved to be the perfect pass.
James Beattie came close to opening his Everton account with a shot that hit the inside of the post.
The £6m striker was also denied when his powerful free-kick was well saved by Charlton keeper Dean Kiely.
Beattie made his home debut but Charlton's neat passing saw them make the early running and it needed a strong defensive header from David Weir to prevent Danny Murphy's cross reaching Shaun Bartlett.
At the other end Talal El Karkouri snaked out a leg to snaffle Kevin Kilbane's pass away from Beattie.
Bartlett then hung at the far post to climb above Alan Stubbs but planted his header straight at Richard Wright from Bryan Hughes' cross.
Two well-organised teams cancelled each other out and when Lee Carsley's handball gave Charlton a sight of goal El Karkouri's shot swung away from the target.
Matt Holland fires Charlton ahead
Everton had made little offensive progress until almost taking the lead on 23 minutes. Marcus Bent flicked on a corner to the far post where David Weir's powerful header was scraped off the line by Murphy.
The home side went close again when Beattie gave chase as El Karkouri's under-weight backpass threatened to sell Dean Kiely short and the Addicks keeper was relieved as his clearance ricocheted to safety off the striker.
Charlton were trying to work the flanks through Jerome Thomas and Paul Konchesky but the main feature in an largely featureless first-half was the strength of the respective defences.
Everton had a rare sight on goal three minutes before the break when Kiely elected to stay at home as Alessandro Pistone swung in a cross and Bent almost made him pay as he headed over from six yards out.
Another set-piece almost opened the door, when Alan Stubbs headed a corner back across goal for Pistone whose shot was blocked by Jonathan Fortune and although the loose ball dropped invitingly at Stubbs' feet he lashed his shot wide from 10 yards out.
But it was Charlton who took the lead in first-half stoppage time when Hreidarsson's mis-hit cross turned into the perfect pass for Holland to rasp in a curling half-volley from fully 20 yards.
Everton boss David Moyes made a tactical switch to beef up his attack at the start of the second half, replacing Bent with Duncan Ferguson.
Ferguson almost made a quick impact as he stuck out a leg to divert Kilbane's shot but Kiely had plenty of time to change direction and save.
Beattie came close to opening his Everton account on the hour, finding space to latch on to Leon Osman's pass and from a tight angle his shot beat Kiely but bounced out off the inside of the keeper's right-hand post.
James Beattie came close to opening his Everton account
Lee Carsley's powerful run saw him latch on to Ferguson's flick but Luke Young showed tremendous athleticism to close down the Everton midfielder and get in a vital blocking challenge.
And as Everton pressed for an equaliser Beattie climbed well at the far post but was unable to get any power into his header which proved to be no test for Kiely who showed his alertness with a sharp save at his left-hand post from substitute James McFadden's shot.
A free-kick 25 yards out gave Beattie another sight at goal but Kiely was again equal to the task as the striker curled his shot around the Charlton wall.
Everton: Wright, Hibbert, Stubbs, Weir, Pistone (Yobo 86), Osman, Carsley, Cahill, Kilbane (McFadden 65), Beattie, Bent (Ferguson 45).
Subs Not Used: Naysmith, Turner.
Charlton: Kiely, Young, El Karkouri, Fortune, Hreidarsson, Holland, Thomas, Murphy, Hughes (Johansson 87), Konchesky, Bartlett.
Subs Not Used: Stuart, Fish, Jeffers, Andersen.
Booked: El Karkouri, Hughes.
Goals: Holland 45.
Ref: H Webb (S Yorkshire).