Ten-man West Brom missed the chance to extend their lead in the Sky Bet Championship as Charlton forced a dramatic 2-2 draw in stoppage time at The Hawthorns.
The Baggies went ahead after 10 minutes through midfielder Matt Phillips, but Charlton equalised on the hour from Macauley Bonne's header.
In the 67th minute, West Brom saw defender Nathan Ferguson shown a straight red card for a foul on Chris Solly.
Substitute Hal Robson-Kanu then looked to have secured the hosts' victory with just nine minutes left.
However, Charlton were awarded a penalty deep into stoppage time and Republic of Ireland international Josh Cullen kept his cool from the spot.
Earlier, Sheffield Wednesday and Leeds had both spurned the opportunity to increase the pressure on the leaders.
The Yorkshire rivals both had to settle for a point from a 0-0 draw at rain-soaked Hillsborough.
Ireland keeper Keiren Westwood made a superb save to deny Leeds' forward Patrick Bamford in first-half injury time.
Keiren Westwood, take a bow... ??— Sky Sports Football (@SkyFootball) October 26, 2019
?? Watch Sheffield Wednesday v Leeds live on Sky Sports Football pic.twitter.com/YNmtrzVnL4
Preston took advantage to move up into second place after coming from 2-0 down to beat Blackburn with a late goal from Tom Barkhuizen.
Rovers had taken the lead inside the opening minute when Preston goalkeeper Declan Rudd spilled Sam Gallagher's header. The forward then curled home a second after 11 minutes.
The hosts clawed their way back into the game after 53 minutes. Darnell Fisher did well to create an angle to cross in from the right and Ireland striker Sean Maguire cushioned a header down for Barkhuizen to slam home from close range.
Preston were level in the 65th minute through a penalty from Dan Johnson after Elliott Bennett had fouled Corkman Alan Browne.
Barkuizen eventually sealed the comeback with eight minutes to go, firing past Walton from a tight angle after Browne's clever through ball from midfield.
At the other end of the table, Huddersfield moved out of the bottom three with a 2-1 win over struggling Barnsley.
The Terriers have now gone six games unbeaten under new boss Danny Cowley.
Defender Christopher Schindler put the hosts in front after half an hour when he converted from close range following a free-kick.
Karlan Grant doubled the lead in the 53rd minute with his eighth league goal and Jacob Brown hit a late consolation for Barnsley, who remain bottom.
New Millwall boss Gary Rowett got his first win with a 2-0 defeat of former club Stoke.
Ben Thompson broke the deadlock in the 28th minute and Jed Wallace wrapped up the points from the penalty spot with 15 minutes left.
Birmingham beat Luton 2-1 with a late goal from Lukas Jutkiewicz.
Kristian Pedersen headed the Blues in front during first-half stoppage time, with Hatters substitute Harry Cornick equalising when his shot went in off the crossbar in the 67th minute.
Jutkiewicz, though, secured all three points when he headed home from a corner in the 82nd minute.
In-form forward Jarrod Bowen scored both goals as Hull beat Derby 2-0.
Bowen broke the deadlock with a 74th-minute header before adding a late second to take his league tally to eight.
Struggling Middlesbrough dropped into the bottom three after a goalless draw at home to Fulham - who had goalkeeper Marek Rodak sent off after just 17 minutes for handball outside the penalty area.
Nottingham Forest's home game against Reading was postponed because of a waterlogged pitch.