Playing for the St. Louis Cardinals (1924-1931) and Cincinnati Reds (1932–1935, 1937), Hafey was a strong line-drive hitter who batted for a high average on a consistent basis. Hafey also had a power peak, averaging 27 home runs and 114 RBI from 1928 to 1930. In the field, he was known for having a "rifle arm." In 1931, Hafey won one of the closest races for a batting title in history, hitting .349 to beat New York's Bill Terry by just .0002, and teammate Jim Bottomley by .0007. The title was only secured by a hit in Hafey's final at-bat of the season. Hafey was fifth in the voting for the 1931 MVP award. When Hafey's Cardinals faced Al Simmons' Athletics in the 1931 World Series, it marked just the second time that two reigning batting champions had opposed one another in the Fall Classic.
Hafey was originally a Cardinals' pitching prospect, but after seeing him bat and run the bases, general manager Branch Rickey converted him to an outfielder. Hafey would be the first major success of Rickey's expansive farm system, breaking through in 1927 when he led the National League in slugging. Hafey, however, had suffered multiple beanings in 1926. He developed sinus trouble and his vision deteriorated, and Hafey began to wear eyeglasses while playing. Although Specs Toporcer was the first baseball player to wear glasses, Hafey was the most prominent; he is one of two Hall of Famers with eyeglasses, Reggie Jackson being the other. Because his vision became so variable, Hafey was obliged to rotate among three different pairs of glasses. In July 1929, Hafey tied a National League record with ten hits in ten consecutive at-bats. In August 1930, he hit for the cycle.
Although the soft-spoken Hafey was overshadowed by some of his raucous Cardinals teammates, he was frequently at odds with management. Hafey's 1931 and 1932 seasons both began late due to salary disputes. Cardinals general manager Rickey fined Hafey for being late and out of shape in 1931. In 1932, coming off his batting title, Hafey demanded that the previous year's fine be added to his 1932 salary. When Rickey refused, Hafey bolted from St. Louis' spring training camp. Rickey responded by trading Hafey to the last-place Cincinnati Reds.
Hafey was happy to join the Reds, who gave him the raise he had sought, but his career faltered. His vision was still erratic, and his persistent sinus condition cost him half of the 1932 season, though he hit .344. In 1933, he was chosen for the inaugural All Star Game, recording the first-ever All-Star hit. Although he maintained a solid batting average as a Red, his offensive production decreased. He missed most of 1935 on the voluntary retired list, and all of 1936. An abortive comeback in 1937 produced tepid results, and Hafey retired for good.
He finished his career batting .317, with 164 home runs and 833 RBI. Hafey played in four World Series, hitting .205 in 92 plate appearances.In 1981, Lawrence Ritter and Donald Honig included Hafey in their book The 100 Greatest Baseball Players of All Time. They cited what they called "the Smoky Joe Wood Syndrome," where a player of truly exceptional talent might rank with the all-time greats on merit, despite a career sharply curtailed by injury.