Danny Hollands late header sealed the win that keeps Charlton at the top of the League One table.
Sheffield United maintained the pressure with a 3-0 victory over Colchester at Bramall Lane, while MK Dons and Huddersfield drew.
Danny Hollands headed Charlton into a 20th minute leader, with Rhoys Wiggins doubling the Addicks advantage just before the break.
By the hour mark though, Rochdale were back on level terms. Grimes and Ball struck twice in three minutes to restore parity.
Another Hollands header clinched the three points when he converted a cross after 80 minutes.
Charlton: Hamer; Solly, Taylor, Morrison, Wiggins; Wagstaff, Hollands, Stephens (Hughes 87), Jackson; Wright-Phillips (Cort 90), Hayes (Euell 87).
Subs (not used): Sullivan, Pritchard.
Goals: Hollands 20, 80 Wiggins 44.
Booked: Jackson 82 (foul).
Rochdale: Kean; Darby, Widdowson, Holness, Balkestein; Tutte, Kennedy (Adams 83), Jones, Akpa Akpro, Grimes, Ball
Subs (not used): Lucas, Trotman, Barry-Murphy, Barnes-Homer.
Goals: Grimes 57, Ball 61.
Booked: Kennedy 31 (simulation), Widdowson 40 (foul), Ball 76 (foul).
Referee: Steve Rushton (Staffordshire).
Attendance: 2,909.