简体   繁体   中英

Submit form via AJAX using plain Javascript without Jquery get checked radio button value

I do have HTML form submitting via AJAX using plain Javascript:

function XMLhttp(){
    var formInputs = document.getElementById(formID).querySelectorAll("input, textarea");

    var selectFormGebdat = formID;

    var toCheckDatesFields = document.getElementsByClassName("checkDate");
    for (var i = 0; i < toCheckDatesFields.length; i++) {
        if(toCheckDatesFields.item(i).value != '') {
            var returnValue = validatedate(toCheckDatesFields.item(i));
            if(returnValue == false) {
                return false;
            }
        }
        
    }
                                                 
    var httpRequest = new XMLHttpRequest();
    var formData = new FormData();

    for( var i=0; i < formInputs.length; i++ ){
        formData.append(formInputs[i].name, formInputs[i].value);
    }

    httpRequest.onreadystatechange = function(){
        if ( this.readyState == 4 && this.status == 200 ) {
            resultData = JSON.parse(this.responseText);

            if(resultData.success == true) {
                document.getElementById('resultok').className += ' show';
            }
            else {
                document.getElementById('resulterror').className += ' show';
            };
           
        }
    };

    httpRequest.open(formMethod, formAction);
    httpRequest.send(formData);
}

selectButton.onclick = function(){
    XMLhttp();
}

selectForm.onsubmit = function(){
    return false;
}

My problem is, that I have radio buttons and select-box. But the selected values are not submitted. F.ex.

<input type="radio" name="typ" value="anfrage"><input type="radio" name="typ" value="reservierung">

If anfrage is checked, the script is not submitting this value - there is always reservierung submitting.

Thanks for help! Martin

I could solve this by:

var formData = new FormData();
if (!form || form.nodeName !== "FORM") {
    return;
}
var i, j, q = [];
for (i = form.elements.length - 1; i >= 0; i = i - 1) {
    if (form.elements[i].name === "") {
        continue;
    }
    switch (form.elements[i].nodeName) {
    case 'INPUT':
        switch (form.elements[i].type) {
        case 'text':
        case 'hidden':
        case 'password':
        case 'button':
        case 'reset':
        case 'submit':
            formData.append(form.elements[i].name, form.elements[i].value);
            break;
        case 'checkbox':
        case 'radio':
            if (form.elements[i].checked) {
                formData.append(form.elements[i].name, form.elements[i].value);
            }                       
            break;
        case 'file':
            break;
        }
        break;           
    case 'TEXTAREA':
        formData.append(form.elements[i].name, form.elements[i].value);
        break;
    case 'SELECT':
        switch (form.elements[i].type) {
        case 'select-one':
            formData.append(form.elements[i].name, form.elements[i].value);
            break;
        case 'select-multiple':
            for (j = form.elements[i].options.length - 1; j >= 0; j = j - 1) {
                if (form.elements[i].options[j].selected) {
                    formData.append(form.elements[i].name, form.elements[i].value);
                }
            }
            break;
        }
        break;
    case 'BUTTON':
        switch (form.elements[i].type) {
        case 'reset':
        case 'submit':
        case 'button':
            formData.append(form.elements[i].name, form.elements[i].value);
            break;
        }
        break;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM