Red Bull's Sebastian Vettel put on a flawless place finish.
Vettel started on pole and led all 61 laps around the 3.152-mile (5.073- kilometer) Marina Bay Circuit for his ninth win of the season and the 19th of his F1 career.
"It was a fantastic result," Vettel said. "I really love this track, and I love the challenge here. It's one of the longest races of the season. The car was fantastic. We were in a comfortable position for most of the race, which is pretty handy around here, because it's a challenge to put the sectors together in qualifying and in the race."
Vettel came within one point of securing the championship at Singapore. With five rounds still remaining this year, the 24-year-old German has accumulated 309 points compared to 185 for Button.
If Vettel scores at least one more point this season, he will clinch the title, regardless of any other driver's performance. The October 9 Japanese Grand Prix is the next race.
"It looks like we have another chance at the next race," Vettel added.
Vettel held a sizeable lead over Button for a majority of the race. He held an 18-second advantage over the McLaren driver at one point, but Button came on strong in the closing laps and finished just 1.7 seconds behind Vettel.
"There were some frustrating moments in the race," Button said. "One was [Kamui] Kobayashi when I sat behind him for a lap and couldn't get past him before he finally pulled over...It was the best we could have done today."
Mark Webber from Red Bull finished third, despite another sluggish start in a race this year.
"Unfortunately, I find myself having to come back through too often this season, because I can't make the starts like I did last year," said Webber, who started alongside his teammate Vettel on the front row. "I just need to keep working harder, because it makes the race quite frustrating and risky to come back through to regain position."
Ferrari's Fernando Alonso, who started on pole and won this race one year ago, took the fourth position. Lewis Hamilton from McLaren bounced back from a penalty early in the early going to finish fifth.
On lap 12, Hamilton clipped the back of Massa's Ferrari. Hamilton sustained front-wing damage, while Massa had a right-rear tire puncture.
Race stewards later assessed a drive-through penalty to Hamilton for causing the collision.
Massa ended up ninth.
Michael Schumacher was involved in a frightening crash just prior to the halfway point. Schumacher ran into the rear of Sergio Perez, launching the front of his Mercedes GP car briefly skywards before slamming head-on into the barrier in turn eight.
"[Perez] just lifted off too early, and I couldn't anticipate it," Schumacher told BBC Radio shortly after the incident. "I was about to try and go on the inside as he was a lot slower than myself."
Perez from Sauber completed the top-10. Schumacher finished 23rd.