Instantiate spawning 100+ clones instead of just one

hello yall, i made an InputField a prefab and wanted to spawn a new input field everytime i hit the submit button. the problem is whenever i click the button it spawn 100+ clones inside of the canvas, which i set as their parent. pls help
This is the code part responsible for the spawning:

void Update()
    {
        submit.onClick.AddListener(delegate { taoOMoi(0); });

        
    }

    public void taoOMoi(int xuathien)
    {
        xuathien++;
        print(xuathien);
        Vector3 vector3 = submit.transform.position;
        //hinhVuong.transform.position = vector3; 
        GameObject vat  = Instantiate(oNhap, vector3, Quaternion.identity) as GameObject;
        //GameObject vat = (GameObject)Instantiate(oNhap, vector3, Quaternion.identity);
        vat.transform.SetParent(choChua.transform, false);
           
    }

Your issue is quite simple here:

you add the listener for the button every frame since it is in the Update function.

move it to the Start function and it will work as intended.

void Start()
{
      submit.onClick.AddListener(delegate { taoOMoi(0); });
}