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 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.
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.
Barkhuizen’s header reduced the deficit early in the second half following a mistake by Rovers keeper Christian Walton.
Preston were level in the 65th minute through a penalty from Dan Johnson after Elliott Bennett had fouled Alan Browne.
Barkhuizen completed the turnaround when he curled in a shot from the edge of the penalty area to send Preston above Leeds on goal difference.
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.