why does this need both stopPropagation and preventDefault?