Как в onclick передать родителя?
А чё не вешать обработчик на сабмит формы? Зачем на кнопку? Ну и ваш атрибут php у нормальных пацанов action называется ))
Как в onclick передать родителя?
https://developer.mozilla.org/ru/docs/Web/API/Elem...

Есть ли какой-нибудь более элегантный способ, чем мой?
class FormSubmitHandler{

    constructor(form){

        this.form = form;

        this.isSending = false;

        this.form.addEventListener('submit', this.onSubmit.bind(this));
    }
    onSubmit(e){

        e.preventDefault();

        // не отправляем форму пока ответ не пришел
        if(this.isSending)
            return;

        const data = new FormData(this.form);

        if(!this.validate(data))
            return;

        this.isSending = true;

        this.send(this.form.getAttribute("php"), data);
    }
    send(url, data){

        fetch(url, {
            method: "POST",
            body: data,
        })
            .then(response => response.json())
            .then(this.onCommit.bind(this))
            .catch(this.onBadRequest.bind(this));
    }
    onCommit(responseData){

        console.log(responseData, this.form);

        this.isSending = false;
    }
    onBadRequest(error){

        console.log(error, this.form);

        this.isSending = false;
    }
    validate(data){

        console.log(data.getAll(), this.form);

        // проверка полей формы
    }
}

///////////////////////////////////////////////

document.querySelectorAll('form').forEach((formElm) => {

    new FormSubmitHandler(formElm);
});