The players won't agree to a salary cap in part because the MLB owners won't agree to revenue sharing comparable to what the NFL and NBA have. Big market teams argue that they paid more for their franchises because they have more revenue because of the markets they're in, small market teams argue that there will never be a level playing field as long as teams like the Yankees, Dodgers and Mets can earn so much more, mostly through local broadcasting rights.
Also, the players have little incentive to change the current system - the big contracts drive the market.