Jody Davis had four RBI and Ferguson Jenkins allowed only four hits in pitching his 49th career shutout as Chicago defeated St. Louis before a "seat-cushion day" crowd of 37,024, the largest of the season in Wrigley Field.
The Cubs won their eighth in nine games and gave the Cardinals their third straight loss.
Jenkins (3-3) became the first Cub to pitch a complete game this season and the first after 69 games, dating to Sept. 15, when Jenkins went the route against Pittsburgh. John Stuper (7-3) was the loser.
"The electricity was flowing from the crowd down to the field," said Jenkins, 39, who won his 281st game. "I was shooting for the shutout in the seventh inning. I began to think a shutout would be good and with it a complete game."
Davis drove in three runs in the second with his eighth homer. The Cubs scored in the fifth on doubles by Bill Buckner and Ron Cey, then got two more runs in the eighth.
Earlier, outfielder Jay Johnstone said he had been fined $100 by Cubs Manager Lee Elia for ignoring a "take" sign on a 3-0 count during Thursday's game with the New York Mets, even though the result was Johnstone's 100th career home run.
Johnstone said he agreed with the decision: "If he doesn't fine me and somebody else does the same thing but pops out, how would he be able to fine the other guy?"