why we need preventDefault here?