How to make 2d movement in air but not on ground?

I am attempting to create a 2d sprite game where a mechanic is only been allowed to move when in the air and be immobilised on the ground. Here is my script so far:

public float speed = 6.0F;

public float jumpSpeed = 8.0F;

public float gravity = 20.0F;

private Vector3 moveDirection = Vector3.zero;

void Update() {
    CharacterController controller = GetComponent<CharacterController>();
    // is the controller on the ground?
    if (controller.isGrounded) {
        //Feed moveDirection with input.
        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        moveDirection = transform.TransformDirection(moveDirection);
        //Multiply it by speed.
        moveDirection *= speed;
        //Jumping
        if (Input.GetButton("Jump"))
            moveDirection.y = jumpSpeed;

    }
    //Applying gravity to the controller
    moveDirection.y -= gravity * Time.deltaTime;
    //Making the character move
    controller.Move(moveDirection * Time.deltaTime);
}

}

This immobilises movement on ground and allows me to jump but it won’t let me move whilst in the air can someone explain to me how to edit my script so it allows movement in the air but keeps them still on the ground?

It looks like you are only processing player input while the character is on the ground:

if (controller.isGrounded) {
        //Feed moveDirection with input.
        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        // ...
 }

If you want them control movement while in the air you will have to build logic that handles that circumstance.