Button joined Premier League side Tottenham Hotspur's youth academy in 2003 and signed a scholarship deal in July 2005.[3][4] After completing his scholarship, he signed his first professional contract on 28 December 2007, running until the summer of 2011.[5] An injury to second-choice goalkeeper Heurelho Gomes saw Button receive his first call-up to senior team substitutes' bench early in the 2009–10 season for a 2–1 Premier League win over West Ham United on 23 August 2009.[5][6] Button made his debut in the following game, replacing Carlo Cudicini after 81 minutes of a 5–1 League Cup victory over Championship side Doncaster Rovers.[7] He was an unused substitute on a further two occasions during the 2009–10 season and signed a new contract after the season,[8] running until 2013.[9] Button spent most of his time as a Tottenham player on loan to other clubs and proclaimed himself a "journeyman", having played for 12 different clubs by the age of 23.[10] In August 2012, despite having not been called into the first team squad in nearly three years, Tottenham goalkeeping coach Tony Parks said he held Button in "high regard" and that Button was a late developer in terms of increasing his strength.[11] Button departed Tottenham in late August 2012, having just played eight minutes in one first team appearance for the club.[12]
2007–08 – Grays Athletic and Rochdale loans
Button moved on loan to Conference Premier side Grays Athletic on a one-month loan on 10 January 2008.[13] He made three appearances during his spell.[14] Button returned to Tottenham on 10 February and moved to League Two side Rochdale on a one-month loan on 27 March.[15] He made no appearances for the club and was an unused substitute on seven occasions.[16]
2008–09 – Grays Athletic, AFC Bournemouth, Luton Town and Dagenham & Redbridge loans
Button rejoined Grays Athletic on a three-month loan on 19 September 2008.[17] He made 17 appearances during his spell and kept four clean sheets.[14] On 16 January 2009 he moved to League Two side AFC Bournemouth on a one-month loan.[18] Button made his Football League debut away at Rotherham United, in a game which Bournemouth lost 1–0.[19] He made four appearances for the club and returned to Tottenham on 28 February.[20] Button joined fellow League Two side Luton Town on a one-month loan deal on 6 March,[21] and was an unused substitute on seven occasions.[22] He was on the bench for Luton's 3–2 2009 Football League Trophy Final victory over Scunthorpe United at Wembley Stadium, which was his last involvement for Luton before his return to Tottenham.[22] Button joined League Two side Dagenham & Redbridge on an emergency loan until the end of the 2008–09 season.[23] Button was, unusually for a goalkeeper, handed the squad number 6 and made his debut for the club in the 3–0 home victory against Bradford City on 18 April.[20] He made two more appearances before returning to Tottenham.[20]
2009–10 – Crewe Alexandra and Shrewsbury Town loans
Button joined League Two side Crewe Alexandra on a one-month loan on 22 July 2009 and he played in the first three games of the season,[24] keeping two clean sheets.[25] Button was recalled by Tottenham after his loan finished, but he re-joined Crewe on a three-month loan on 1 September.[26] He made his second debut for Crewe 5 September against Macclesfield Town and was credited with an assist for Joel Grant's winning goal in the 2–1 victory.[27] After a further six appearances,[25] Tottenham recalled Button on 27 October.[28] On 20 November 2009, Button joined League Two side Shrewsbury Town on loan until January 2010.[29] His loan was extended by a further month in January and then until the end of the season in February.[30][31] He had a successful spell, making 26 appearances and keeping 9 clean sheets.[25]
2010–11 – Plymouth Argyle loan
On 3 August 2010, Button joined League One side Plymouth Argyle on a season-long loan.[32] Playing for the first time at League One level, injuries from September through to November disrupted his spell and he was dropped on 22 February 2010 after an eight-game losing run.[5] Button managed to oust Romain Larrieu as number-one and regain his place in early April,[33] though his efforts were in vain as Plymouth finished 23rd and suffered relegation to League Two.[34] Button made 30 appearances during the season.[35]
2011–12 – Leyton Orient, Doncaster Rovers and Barnsley loans
Button joined League One side Leyton Orient on 26 August 2011, on a loan running until 7 January 2012.[36] He made only two appearances before suffering a shoulder injury which kept him out until Boxing Day.[37] On 1 January 2012, Button left Leyton Orient and joined Championship side Doncaster Rovers on a one-month loan,[37] which was later extended by another month.[38] He made eight appearances during his stint.[39] On 19 March 2012, Button joined fellow Championship side Barnsley on an emergency loan deal, to cover for the injured David Preece.[40] He made 9 appearances.[39]
Charlton Athletic
On 28 August 2012, Tottenham Hotspur reached an agreement with Championship side Charlton Athletic for the permanent transfer of Button for a £500,000 fee.[12][41] He served as backup to Ben Hamer and had to wait until January 2013 for his debut, in a 1–0 FA Cup third round defeat to Huddersfield Town.[42] Hamer was dropped by manager Chris Powell in March and the first of four consecutive appearances came on 2 March in a 1–0 league defeat at home to Burnley.[42][43] After Button's fourth appearance against Huddersfield in the league on 9 March, Powell said "David has now got the shirt",[43] but Hamer soon regained his place and Button made only two further appearances.[42] He made just six appearances for Charlton and departed The Valley in July 2013.[44][45] Button revealed the following year that though Chris Powell wanted him to stay, he had a difficult year with the Addicks and forced his departure from the club.[46]
Brentford
On 30 July 2013, League One club Brentford signed Button on a two-year deal for an undisclosed fee.[45] The departure of Simon Moore to Cardiff City and injury to Richard Lee saw Button begin the season as manager Uwe Rösler's first-choice goalkeeper.[47] Button started each of Brentford's opening six league games, but disaster struck on 7 September against Bradford City when with the score at 0–0, Button received a straight red card for a challenge on Bradford player Nahki Wells just outside the penalty box after 26 minutes.[48] During his three-match suspension, Jack Bonham and then the fit-again Richard Lee took over the goalkeeping position. Button made his next appearance in a 1–0 defeat to Rotherham United on 5 October and regained his position as first-choice goalkeeper.[49] An open forum between players and management in the dressing room after a 2–1 defeat to Stevenage on 12 October saw a turnaround in the team's fortunes and the beginning of a run of nine consecutive wins in the league,[50] with Button appearing in eight of those matches and keeping seven clean sheets.[51] With Button as a virtual ever-present, the Bees secured automatic promotion to the Championship after a 1–0 win over Preston North End on 18 April 2014.[52] Button made 45 appearances and kept 20 clean sheets in league matches during the 2013–14 season.[49] He signed a new three-year contract on 27 June 2014, which would keep him at Griffin Park until the end of the 2016–17 season.[53]
With Richard Lee frequently injured, Button was undisputed first choice during the 2014–15 season.[54] His performances against Huddersfield Town and Ipswich Town in March 2015 saw him selected in the Football League Team of the Week.[55] A successful second season at Griffin Park for Button ended after Brentford's 5–1 playoff semi-final aggregate defeat to Middlesbrough.[56] He made 49 appearances,[57] keeping 11 clean sheets in league matches.[58] Button was again first choice during the 2015–16 season, featuring as an ever-present in league matches and talks began over a new contract in May 2016.[59][60] The talks broke down and he departed Brentford on 19 July 2016, having made 141 appearances during three seasons with the club.[44][61]
Fulham
On 19 July 2016, Button joined Championship club Fulham on a three-year contract, with an option for a further year, for an undisclosed fee.[62] He was the first-choice goalkeeper during the 2016–17 season, until he lost his place to Marcus Bettinelli in early April 2017.[63] A 6th-place finish saw the Cottagers qualify for the playoffs,[64] but Button could only look on as an unused substitute during the 2–1 aggregate defeat to Reading in the semi-finals.[65]
Brighton & Hove Albion
Button signed for Premier League club Brighton & Hove Albion on 16 July 2018 on a three-year contract for an undisclosed fee.[66] Button made his debut for the Sussex club in an EFL Cup tie against south coast rivals Southampton on 28 August 2018 where Brighton lost 1–0 at Falmer Stadium with Charlie Austin netting the only goal of the game.[67] Button made his Premier League debut on 29 December 2018 in a 1–0 home win against Everton where he made some crucial saves in a good win for the Albion.[68] Button went on to make three more Premier League appearances and one FA Cup appearance whilst he covered for Maty Ryan who was competing for Australia in the Asian Cup.
West Bromwich Albion
On 5 September 2020, Button transferred to recently promoted Premier League side West Bromwich Albion for an undisclosed fee.[69] Button made his debut on 16 September in which he kept a clean sheet in the 3–0 EFL Cup victory over Harrogate Town at The Hawthorns.[70][71] He played in their next league cup game six days later where West Brom lost on penalties at home to Button's former club Brentford after a 3–3 draw at full time.[72] Button's next appearance came in the FA Cup, losing in another penalty shootout, this time away at Blackpool on 9 January 2021.[73] On the same day it was revealed that West Brom had signed former Preston North End and Liverpool veteran keeper Andy Lonergan.[74] One week later Button made his league debut for the club, playing in the 3–2 away win over Wolverhampton Wanderers, in place of Sam Johnstone who was out with COVID-19.[75]
After relegation from the Premier League in the previous season, West Brom opened the Championship season on 6 August with an away fixture against Bournemouth where Button was preferred over Sam Johnstone playing in the 2–2 draw.[76] After Sam Johnstone was sent off after the final whistle in the 1–1 home draw against Cardiff City on 2 January 2022, Button won some game time and played in several consecutive matches. This included a 2–1 home loss to his previous club Brighton in the FA Cup third round on 8 January. Button kept his place in goal after Johnstone's suspension was over with head coach Valerien Ismael keeping the first choice keeper out due to an internal issue.[77][78][79][80][81][82][83] New manager Steve Bruce admitted in April that it was likely that Sam Johnstone would leave on the expiry of his contract, with Button playing West Brom's five remaining matches of the season with Johnstone absent from the squad. In the 4–0 home victory over already relegated and his former loan club Barnsley in the last game of the season, Button assisted Adam Reach's goal with a long range pass with West Brom sealing 10th place.[84][85][86][87][88][89][90]
Reading
On 8 August 2023, Button's contract was terminated by mutual consent.[91] The following day, he signed a two-year contract with League One club Reading.[92]