Button, the reigning world champion, vaulted to the top of the Formula One standings by employing some cool-headed decision making amid the chaos of changing weather that forced most drivers to pit at least four times. Button made only two stops.
Rain began to fall just before the race started, yet all the cars started on dry-weather tires. A dampening track soon forced a critical decision.
Many of the leaders elected to change to wet-weather tires after a couple of laps, while Button, and third-place finisher Nico Rosberg stayed out on dry-weather tires.
Drivers who had changed to wet-weather treads soon found their rubber wearing quickly and after three or four more laps, returned to the pits to change back. That allowed Button, Rosberg and Renault's Robert Kubica to dash to the front.
"It was my best race victory," Button said. "This one was pretty special because it was very tough conditions. It was a tricky race out there and again we called it right. It was not just about being quick, it's about reading the conditions.
"Sometimes you have to take those risks. That is what won us the race -- being on the right tire and the right time made all the difference."
Hamilton was among those forced to double-pit early, but charged through the field from ninth after nine laps to second after 39. It looked like he might overtake Button, who ran off the track with five laps to go as his tires wore away, but Hamilton's tires also soon became liability.
"It was really the wrong call for us and it ruined the race a little bit," Hamilton said of switching tires twice early. "It was definitely an exciting race. To climb my way back up to second was great."
Rosberg led until lap 19, when he ran wide on his worn tires and Button was able to pass.
"It was a really good choice at the beginning," Rosberg said. "I thought I would give it a go and stay out."
Late in the race, when all the drivers' tires were worn, Rosberg was challenged by Fernando Alonso, but the German held firm and kept the Ferrari driver in fourth.
Alonso led into the first corner of the race, but was quickly penalized for jumping the start and given a drive-through penalty. That penalty, plus his four tire changes, meant the Spaniard made five trips to the pits. His countryman, Toro Rosso's Jaime Alguersuari, made six stops -- one short of the F1 record -- illustrating the difficulty teams had in reading the track and the changing conditions.
Renault's Robert Kubica finished fifth and teammate Vitaly Petrov earned his first F1 points by taking seventh.
Separating the Renault pair was pole sitter and defending race champion Sebastian Vettel. The Red Bull driver was shuffled back by his decision to change to wet tires and then back to dry ones, and was never in contention.
His Red Bull teammate Mark Webber enlisted the same strategy and finished eighth, ahead of Ferrari's Felipe Massa and Mercedes' Michael Schumacher, who again struggled for much of the race, and was reduced to trying hold off quicker rivals. Schumacher, back after a three-year retirement, won this race in 2006 for the last of his record 91 victories.
After four races this season, Button leads the drivers' standings with 60 points, ahead of Rosberg's 50. Hamilton and Alonso are tied for third with 49 points.
McLaren also took over the lead in the constructors' standings, with 109, ahead of Ferrari with 90. Mercedes jumped to third with 78, ahead of Red Bull with 73.
The race also featured two pit lane incidents. The first saw Hamilton and Vettel race in the entry to the pits, and after their stops, the pair drove wheel-to-wheel along the pit lane.
Both drivers received an official postrace reprimand for driving "in a dangerous manner."
The second incident involved Alonso passing teammate Massa on the tight pit entry, leading Ferrari chief Stefano Domenicali to throw his hands into the air.
The next race will be the Spanish Grand Prix in Barcelona on May 9.