You don't use the `;` with '&', the '&' on its own is enough to finish the command. I believe there is currently no mention of this behaviour in the manual. Your loop would simply be:
for dir in $(ls); do command $dir & done
Additionally, you should consider using a glob instead of `$(ls)` which will fail if the filename contains whitespace. You can set `nullglob` to prevent `dir` being a `*` if there are no files:
shopt -s nullglob
for dir in *; do command $dir & done