Sanchez went 7-of-15 for 104 yards and a 13-yard scoring strike to Edwards that put the Jets up 16-10 late in the first half. But the rookie first-round pick was knocked out of the game when he injured his right knee diving headfirst on an 8-yard run early in the third quarter.
Jay Feely hit four field goals, including a 49-yarder, as the Jets (6-6) won their second straight game.
The Bills (4-8) struggled in the second half, when their offense was limited to 36 yards and four first downs.
After Rian Lindell hit a 32-yard field goal to cut the Jets' lead to 19-13 with 5:28 left, the Bills were unable to muster a threat on their final possession.
Shaun Ellis burst up the middle to sack Ryan Fitzpatrick for a 10-yard loss. On the next play, Fitzpatrick attempted a desperation heave up the right sideline intended for Terrell Owens. The pass was underthrown, which allowed Darrell Revis to intercept it with 2:02 remaining. The Jets then were able to run out the clock.
Revis kept Owens in check, limiting him to three catches for 31 yards, and spoiling a game which was billed as "T.O. in T.O."
"I just try the best I can," Revis said. "We know he's a big-time receiver. I get that job every week."
The game was Buffalo's second in Toronto, part of a five-year, $78 million deal the Bills reached with Toronto-based Rogers Communications last year to play one annual regular-season game and three preseason contests in Canada's largest city and financial capital.
"This is my first time going outside of the country. I got my passport for the first time," Revis said. "It was a good time."
Marshawn Lynch scored on a 15-yard run and Lindell had three field goals, including a 49-yarder. The Bills now have lost both games north of the border following a 16-3 loss to Miami last year.
The Jets remained in the playoff hunt, but Sanchez's status for next weekend's game at Tampa Bay was unclear.
The former Southern California star was hurt on a headfirst dive ending an 8-yard run on New York's second possession of the second half. He stayed in the game for two more plays before being replaced by Kellen Clemens.
Sanchez was examined by trainers for several minutes on the sideline before he made his way with a slight limp to the locker room. He already was nursing a sore left knee from Sunday's 17-6 win over Carolina and the Jets brought in Yankees manager Joe Girardi this week to help him with his sliding technique.
New York's Thomas Jones had 109 yards rushing to break the 1,000-yard mark for his fifth straight year.