Johnnie Jackson grabbed a late winner as Charlton twice came from behind to beat in-form Watford.
Daniel Pudil's early strike put Watford ahead but Charlton hit back through Tommie Hoban's own goal and Yann Kermorgant's header.
Almen Abdi's penalty and Alexandre Geijo's goal put Watford ahead before Kermorgant tucked in another equaliser.
Addicks skipper Jackson then struck with a header at the end of a breathless encounter at Vicarage Road.
Hornets boss Gianfranco Zola, despite an impressive 3-1 win at Brighton on Saturday, dropped goalscorers Troy Deeney and Matej Vydra but it was keeping them out that proved the problem here.
The hosts did take an early lead when Geijo's low shot was saved by Charlton goalkeeper Ben Hamer in the 11th minute and Pudil turned in the rebound for his first goal for the club.
Chris Powell's Charlton levelled in the 33rd minute when Jackson swung in a corner, and after a scramble it eventually went in off Watford defender Hoban.
Soon after Charlton were ahead when Bradley Pritchard's cross was powered in by Kermorgant.
Dorian Dervite tripped Fernando Forestieri in the area after the break to hand Watford a penalty and Abdi tucked away the spot kick before Geijo clipped the ball past Hamer to regain the advantage for Zola's side.
But their lead was short-lived as Ricardo Fuller crossed for Kermorgant to tuck away his second of the game and former Watford loanee Jackson headed in Dale Stephens' corner to give Charlton their first win since November.
Watford manager Gianfranco Zola: "We went in front but we were certainly not the normal team that we are.
"The passing wasn't good enough, we were sloppy and it was very costly. We tried to get into the game, in the second half we did better, but sometimes it's too late.
"Maybe we had too many compliments (after beating Brighton) the other day and we went on the pitch with probably not the same awareness they had because they were winning all the second balls, all the headers and they found themselves 2-1 up by doing little."
Charlton manager Chris Powell: "We had a tough December - three draws, three losses - after having a very good November, so it's a real positive result for us and a good way for us to kick off the new year.
"It was a sensational game. Both teams played their part in what was a great game for everyone watching but I felt on the balance overall we just about deserved it.
"But they had some good chances, my keeper made a couple of good blocks, but overall we had 10 chances to their five and it was the good we took four of them."