Town ended a run of four games without a win with goals from Owen Garvan and Danny Haynes.
But Blues ended the match with 10 men after Shefki Kuqi's dream return to Portman Road saw him stretchered off the pitch five minutes from time. The Finn going down in a heap under no challenge.
Garvan opened the scoring on 20 minutes with a freak goal, the Republic of Ireland U21 international's cross shot beating Nicky Weaver from a wide angle.
Haynes, on as a first-half substitute for Norris, added a second on 52 minutes, volleying in from the edge of the box.
Matt Holland and Darren Ambrose were given a fitting ovation from the home fans on their return to Portman Road.
Kuqi was also given a rousing reception as he took his place on the Town bench following his loan move from Crystal Palace.
Jim Magilton made one change to the side that lost at Barnsley, Sito coming in for Richard Naylor, who has a recurrence of his neck injury. Alex Bruce moving across to the middle of the backline.
Alan Lee had an opening in the first 10 seconds, firing over from 25 yards, Bruce then forcing Weaver into a tip over save after a corner had been put back into the box by David Norris.
Bruce blocked Leroy Lita's shot before Greg Halford headed against the bar from an Ambrose corner on the quarter hour.
The breakthrough came on 20 minutes, Pablo Counago leading a breakaway with Garvan and Alan Quinn that forced a corner and when the ball was cleared to Garvan 25 yards out on the angle, he whipped in a cross cum shot that beat Weaver and into the roof of the net.
Lee was booked as Town looked for a penalty, the Republic of Ireland international going down under Ambrose's challenge. Referee Nigel Miller showed the yellow card rather than point to the spot.
Haynes replaced Norris midway through the half, Counago forcing Weaver into a smart save after the Spaniard had cut inside the Addicks' defence.
Ambrose had the ball in the net but not before the offside flag was raised, Paddy McCarty then going into referee Miller's notebook. The Charlton defender and Lee having a ding-dong battle through the whole of the first-half. Jose Semedo then joining him.
A terrific ball from Holland released Ambrose, who blitzed over while at the other end, Quinn headed over at the back post.
Stephen Bywater saved comfortably from Lita, Quinn's cross headed over by Lee in the last opening of the half.
Jerome Thomas had a shot deflected over in the first minute of the second-half as the visitors started brightly but Alan Pardew's side were rocked on 52 minutes when Haynes volleyed in after a corner had only been half cleared.
Charlton made their first change just before the hour mark, Chris Iwelumo on for Semedo.
Lita couldn't find the net at the near post and Counago just failed at the other end with a quick turn and strike.
Sito and Garvan defended superbly to block Holland's shot then Sito reacted quickest to hook away from Ambrose.
Kuqi got the loudest roar of the game when he entered the action on 70 minutes, the Finn replacing Counago.
Iwelumo had the ball in the net on 77 minutes but the Addicks were denied again by the offside flag, bringing the travelling' fans celebrations to a premature end.
Garvan tested his arm from 40 yards, Weaver back pedalling to make a comfortable catch before Blues made a third change, Tommy Miller on for Lee. Luke Varney and Andy Gray also joining the action with Zheng Zhi and Lita making way.
Blues played out the last five minutes with 10 men after Kuqi crumbled to the floor. The striker beat the pitch in frustration before being stretchered off.
The win takes Town above Charlton in the Championship table and keeps Blues firmly in the Play-Off picture.
Town: Bywater, Wright, De Vos, Bruce, Sito, Norris (Haynes 25), Sumulikoski, Garvan, Quinn, Lee (Miller 81), Counago (Kuqi 70). Subs not used: Colgan, Harding. Booked: Lee.
Charlton: Weaver, Halford, Sodje, McCarthy, Thatcher, Ambrose, Holland, Zheng Zhi (Varney 85), Semedo (Iwelumo 58), Thomas, Lita (Gray 83). Subs not used: Elliot, Gray, Varney, Fortune. Booked: Semedo, McCarthy.
Att: 23,539


















