grep foo * --directories=skip will skip grepping directories like regular files.
As per the man page:
-d action, --directories=action Specify the demanded action for directories. It is `read' by default, which means that the directories are read in the same manner as normal files. Other possible values are `skip' to silently ignore the directories, and `recurse' to read them recursively, which has the same effect as the -R and -r option.
Also, grep foo * -s will do something similarly satisfying.
-s, --no-messages Silent mode. Nonexistent and unreadable files are ignored (i.e. their error messages are suppressed).