Đạo quân của Toa Đô ở Chiêm thành kéo ra đánh lấy đất Nghệ an. Trần quang Khải đem quân lùi ra mặt ngoài giữ các đường hiểm yếu. Toa Đô đánh mãi không được, mà lương thảo thì một ngày một cạn, bèn cùng với Ô mã Nhi dẫn quân xuống thuyền vượt bể ra ngoài Bắc để hợp binh với Thoát Hoan. Trần quang Khải được tin ấy, cho người về Thanh hóa phi báo. Nhân tông hội quân thần lại hỏi kế, Hưng đạo vương tâu rằng: "Toa Đô tự Chiêm thành trở ra, qua vùng Ô lý (Thuận hóa), Hoan (Nghệ an), Ái (Thanh hóa), đường sá gập ghềnh, quân sĩ vất vả, nay lại vượt bể ra Bắc, thì sức lực cũng đã mỏi mệt. Vậy nay nên sai một tướng nên ra đón đường mà đánh thì chắc phá được".
Nhân tông nghe lời, sai Chiêu văn vương Trần nhật Duật làm tướng và Trần quốc Toản làm phó tướng cùng với tướng quân là Nguyễn Khoái đem 5 vạn quân ra đón đường đánh Toa Đô ở mặt Hải dương. Tháng tư năm ất dậu (1285) Trần nhật Duật ra đến Hàm tử (thuộc huyện Đông an, Hưng yên) thì gặp chiến thuyền của Toa Đô, Nhật Duật liền phân binh ra đánh. Quân Nhật Duật bấy giờ có bọn Triệu Trung là tướng nhà Tống sang xin tùng chinh, mặc áo đeo cung như quân nhà Tống. Đến khi giáp trận, quân Nguyên trông thấy bọn Triệu Trung, tưởng là nhà Tống đã khôi phục được nước Tàu, rồi cho quân sang cứu An nam, đứa nào cũng sợ hãi bỏ chạy. Quân ta đuổi đánh, quân giặc thua to chết hại rất nhiều. Toa Đô phải lùi ra ở bải Thiên trường.
Trần nhật Duật thắng trận, cho Quốc Toản đưa tin về Thanh hóa. Hưng đạo vương được tin mừng ấy, vào tâu với vua rằng: "Quân ta mới thắng, khí lực đang hăng, mà quân Nguyên mới thua, tất cũng chột dạ. Vậy nên nhân dịp này mà tiến quân đánh Thoát Hoan để khôi phục Kinh thành".
Vua nghe lời truyền sắp sửa tiến binh. Sực có Thượng tướng Trần quang Khải ở trong Nghệ an ra, xin đi đánh Thoát Hoan. Vua liền sai Quang Khải thu xếp quân sĩ để ra đánh Thăng long và truyền hịch sai Trần nhật Duật đóng quân giữ chặn đường không cho bọn Toa Đô kéo lên hợp với Thoát Hoan.
Trần quang Khải với Trần quốc Toản và Phạm ngũ Lảo đem quân từ Thanh hóa đi thuyền vòng đường bể ra đến bến Chương dương, sấn vào đánh chiến thuyền của quân Nguyên. Quan quân đánh hăng quá, quân Nguyên địch không nổi phải bỏ chạy. Quan quân lên bộ đuổi đánh về đến chân thành Thăng long hạ trại. Thoát Hoan đem đại quân ra cự địch, bị phục binh của Trần quang Khải đánh úp lại, quân Nguyên phải bỏ thành Thăng long chạy qua sông Hồng hà sang giữ mặt Kinh bắc (Bắc ninh).
Trần quang Khải đem quân vào thành mở tiệc khao quân. Đến khi uống rượu vui vẻ, Quang Khải ngâm bài thơ rằng:
Đoạt sáo Chương dương độ
Cầm hồ Hàm tử quan
Thái bình nghi nỗ lực
Vạn cổ thủ giang san
Dịch nôm:
Chương dương cướp giáo giặc
Hàm tử bắt quân thù
Thái bình nên gắng sức
Non nước ấy nghìn thu
Trần quang Khải sai người về Thanh hoá dâng biểu báo tin thắng trận. Vua Nhân tông thấy quân thế đã mạnh, trong hai tháng đánh được hai trận, quân sĩ ai nấy đều nức lòng đánh giặc, bèn rước Thượng hoàng và cất binh mã ra đóng ở Tràng an (Ninh bình).