Details were still emerging, but police said a bomb had exploded on one bus in a relatively isolated area of Jerusalem , sparking a fire that spread to another one as well as a car.
Israeli domestic security agency Shin Bet referred to the explosion as a "terror attack".
The bombing was expected to lead to a sharp increase in security ahead of Jewish Passover celebrations beginning Friday night.
An AFP journalist at the scene said one bus was completely burnt out while another was partially burned, with a large contingent of fire fighters battling to extinguish the blaze.
Police said 21 people were injured, with medics reporting at least two hurt seriously. Police were investigating whether any of the wounded were behind the bombing.