The method I use here is a tad faster and longer-lasting in a dry environment. (Balloons tend to dry out and tear where I live.)
I also prefer the furry feel of the uncoated tennis ball.
tennis balls (I collect discards from tennis players)
granular material (rice, beans, sand, or whatever)
Step 1: Slit Ball and Fill
Using a sharp blade, make a short slit on one of the ball seams.
Pinch the ball to open the slit and insert a funnel (optional).
Fill the ball with your chosen granular material. The granular material adds some heft, as well as damps out the bounce so they're easier to retrieve when you drop them.
If you don't have a funnel, I find it's easiest to put the ball into a bag of granular material so you can scoop it in without making a mess.
You want to fill it reasonably full, but not so full that the seam doesn't close when you release the ball (after banging it around a little to settle the material).
Some jugglers like a little slosh in the ball, which means you leave a little space. You can put a rubber band around the ball to hold it closed while you toss it around and decide if it's the right amount of fill.
Step 2: Seal the Ball
I have experimented with a number of sealants over the years and I find "Shoe Goo" to be the most durable. It's more or less made for this kind of thing.
Put some sealant in the seam, making sure you work it into both corners. You don't need a lot because the glue joint will be extremely thin.
Close the seam and wipe across it to remove excess sealant.
Put a piece of plastic wrap over the seam to protect the rubber band.
Place a rubber band over the ball to hold the seam closed. A single thick band, like the ones you get with a bunch of broccoli, will hold it nicely. Alternatively, you can use several thinner bands.
Allow to set according to the directions on the tube.
Remove bands and plastic wrap and you're ready to juggle!