Preston striker Chris Brown scored a goal in each half to earn his side a vital victory in their survival fight and dent Charlton's promotion hopes.
Tamas Priskin shot wide as Preston began well and they were rewarded with a goal when Brown was played onside by the injured Sam Sodje and fired home.
Leroy Lita had a shot blocked for the hosts before Paddy McCarthy scrambled in an equaliser from close range.
But Brown won it with a superb turn and finish from eight yards out.
Charlton manager Alan Pardew:
"We have let our fans down. They have vented their frustration and so have I in the dressing room afterwards.
"We looked like we lost our way which is not something I expect from one of my teams.
"We've upset our fans and we've upset ourselves. We'll be in on Sunday to get this out of our system. They were due to have the day off but they are hurting and I don't want them to sit at home and mope about it.
"The crowd were not particularly patient and unfortunately some of our players didn't react well to that. They looked to play the cheap option and hit it long.
"We were on our heels and were being dictated to by a side who played well. We were quite rightly booed off. Preston deserved to win but we have to go out on Tuesday at Burnley and prove that we are better than that."
Preston manager Alan Irvine:
"We thoroughly deserved it. The players know their jobs and are working hard for each other.
"We are hard to beat and break down and that gives you a platform to go and win games. We drew at Watford, won at Leicester and won here and we have been good value for those results.
"I looked at the fixtures and thought 'how are we going to pick up points from these games?' So I am obviously absolutely delighted with the haul we've managed.
"It's a massive three points but sadly it's not finished yet. We need a lot more and hopefully after taking this step forward we don't take one back."
Charlton: Weaver, Halford (Iwelumo 82), Sodje, McCarthy, Youga, Sam (Scott Sinclair 14), Holland, Zhi, Ambrose, Lita, Varney (Gray 46).
Subs Not Used: Elliot, Semedo.
Goals: McCarthy 74.
Preston: Lonergan, St. Ledger, Mawene, Jones, Davidson, Whaley (Hill 87), McKenna, Carter, Sedgwick, Brown, Priskin (Mellor 71).
Subs Not Used: Chris Neal, Lewis Neal, Trotman.
Goals: Brown 15, 77.
Ref: Grant Hegley (Hertfordshire).