Iowa had plenty of chances to put No. 22 Wisconsin in a big early role.
The Hawkeyes, though, settled for field goals rather than touchdowns, and the Badgers made them pay in the second half.
James White ran for 132 yards and a pair of late touchdowns as 22nd-ranked Wisconsin beat Iowa 28-9 on Saturday for its third straight win.
Joel Stave added two touchdown passes for the Badgers (6-2, 4-1 Big Ten), who are bowl eligible for the 12th year in a row.
Iowa can join Wisconsin in the postseason if it beats hapless Purdue next weekend — but the Hawkeyes will need a much better effort on offense.
Iowa was held to field goals of 28, 22 and 29 yards from Mike Meyer and didn't score a touchdown for the first time this season.
"To their credit, they had their opportunities and did something with them," Iowa coach Kirk Ferentz said. "On the flip side, when we had our chances we didn't."
Those opportunities came after a pair of Iowa interceptions.
Wisconsin's Pat Muldoon intercepted Hawkeyes backup C.J. Beathard at the Hawkeyes 25-yard line with 7:43 left, setting up an 11-yard TD run by White.
White added a 2-yard touchdown with 1:35 left for the Badgers, who won despite a season-low 62 yards rushing from Melvin Gordon.
Hawkeyes quarterback Jake Rudock had 109 yards passing for the Hawkeyes (5-4, 2-3) before leaving the game in the third quarter with a sprained left knee.
"He probably could have gone back in there but I'm just not sure I saw the value in that one, putting him at risk at this point. The doctors think he should be fine by next week," Ferentz said.
In a game where field position and ball security was crucial, Iowa made its first huge mistake midway through the third quarter.
The Badgers made the Hawkeyes pay a play later.
Rudock threw a terrible ball into coverage that was picked off by Darius Hillary at the Iowa 20. Stave then found a wide-open Jared Abbrederis for a touchdown and a 14-6 lead — though Abbrederis would subsequently leave the game with a chest injury.
Meyer hit a field goal that made it 14-9 heading into the fourth quarter.
Iowa was still within five when Beathard, in the first meaningful action of his career, threw a pass that bounced off the head of one of his linemen. Muldoon caught the deflection, and White essentially clinched the game three plays later.
Beathard had 70 yards on just 4 of 16 passing.
Iowa couldn't get much going on the ground either, even though Wisconsin linebacker Chris Borland was held out because of a strained hamstring.
Mark Weisman — who Ferentz described as "nicked up" but also likely to be ready for Purdue — had just 15 yards rushing.
"They outplayed us. They had a great game plan coming in for us. They out-executed us and you know, we just have to keep working and finish a full game," Iowa lineman Brandon Scherff said.
The wind and a pair of strong rush defenses were major factors as both teams struggled to move the ball early.
The Badgers erased nearly two quarters of offensive futility with one big play.
An unpressured Stave found Jacob Pedersen alone near the Iowa's 5-yard line, and he strolled into the end zone for a 44-yard TD grab and a 7-6 Wisconsin lead with 1:49 left in the first half.
It was the first time Iowa had trailed at the break all season.
The Hawkeyes certainly had their chances, though.
Iowa twice got inside the Badgers 11-yard line — converting a key fourth down on each drive — but had to settle for field goals of 28 and 22 yards from Meyer.
Wisconsin's Jack Russell appeared to drill a 54-yard field goal with the wind at his back to end the half. But Iowa called three consecutive timeouts, and Russell ultimately missed short and right.
But field goals were all the Hawkeyes could muster as they fell for the third time in four games.
"When you play a team that's very tough and makes it tough on you — and you make it tough on yourself, it's just not a good thing," Ferentz said.