The away side took the lead during the Revierderby, with Mario Goetze opening the scoring after 14 minutes.
During the celebrations an object, thought to be a lighter, was thrown towards Sancho from the home support, with the Dortmund forward reacting by holding his face.
The England international then left the pitch to receive treatment, with Schalke being awarded a penalty and levelling the game through Daniel Caligiuri during the time Sancho was off the field.
Salif Sane put Schalke ahead soon after, with Caligiuri scoring his second of the game from a free kick conceded by Marco Reus.
Reus was dismissed following the foul, with Marius Wolf also being sent off during the second half for serious foul play.
Saturday's clash is the 94th meeting in the Bundesliga between the two clubs, with there never being as big a points difference between them going into a league fixture.
Dortmund started the weekend 42 points ahead of Schalke and are battling with Bayern Munich for the Bundesliga title.
Their chances of being crowned champions took a hit, though, as Schalke secured a valuable league victory.
It leaves Dortmund a point behind leaders Bayern, having played an extra game.