Переключатели/вычисление текстового поля: отменить выбор/пересчитать, если пользователь передумает (Javascript/jquery/php)

У меня есть веб-форма php, с которой мне нужна помощь.

В этой части формы используется javascript. Установка переключателей рядом с параметрами заполняет сборы в соответствующих текстовых полях, и эти значения текстовых полей рассчитываются в текстовом поле «Общая сумма».

Пользователь может выбрать только один язык за 75 долларов. У них также есть возможность выбрать соответствующий кредит для этого языка за 275 долларов.

Если человек выбирает только вариант кредита, я хочу, чтобы также была выбрана кнопка соответствующего языка, и обе комиссии должны отображаться в соответствующих полях и правильно рассчитываться в общей сумме.

Если человек передумает и выберет другой язык, другие переключатели из его прежнего выбора должны отменить выбор, а соответствующие текстовые поля платы должны быть очищены. Вот тут у меня беда. Когда я меняю выбор, форма не всегда очищает текстовые поля промежуточных итогов из предыдущего выбора и продолжает добавлять комиссию из предыдущего выбора в общий итог. (Общая сумма формы никогда не должна превышать 307 долларов.)

Я не являюсь опытным программистом, и я признаю, что код, который я использую, не самый современный/эффективный. С тех пор, как был написан исходный javascript в таком виде, jquery и php стали доминирующими. Эта форма использует смесь javascript старой школы, jquery и php. Я приветствую все возможные решения для выполнения этой задачи.

Поэтому я обращаюсь к этому сообществу с благодарностью за любое время, потраченное на помощь мне в обучении.

http://jsfiddle.net/k5wL5vx6/

function total()
    {

var total=0;
var reg=0;  

if (window.document.registration.dutch_EENCx075_27745.checked) {
        reg=reg+75; window.document.registration.dutch_EENCx075_27745_subtotal.value=75;
    } else {window.document.registration.dutch_EENCx075_27745_subtotal.value = ""; }

if (window.document.registration.dutch_WLC110_27750.checked) {
    window.document.registration.dutch_EENCx075_27745.checked = true; 
        reg=reg+232; window.document.registration.dutch_WLC110_27750_subtotal.value=232;
        reg=reg+75; window.document.registration.dutch_EENCx075_27745_subtotal.value=75;
    } else {window.document.registration.dutch_WLC110_27750_subtotal.value = "";}

if (window.document.registration.esl_EENCx075_27745.checked) {
        reg=reg+75; window.document.registration.esl_EENCx075_27745_subtotal.value=75;
    } else {window.document.registration.esl_EENCx075_27745_subtotal.value = ""; }

if (window.document.registration.esl_WLC110_27751.checked) {
    window.document.registration.esl_EENCx075_27745.checked = true;
        reg=reg+232; window.document.registration.esl_WLC110_27751_subtotal.value=232;
        reg=reg+75; window.document.registration.esl_EENCx075_27745_subtotal.value=75;
    } else {window.document.registration.esl_WLC110_27751_subtotal.value = ""; }

total = total + reg; 

   window.document.registration.amount1.value=total.toFixed(2);  

}

person Gracie    schedule 23.01.2015    source источник


Ответы (1)


Это работает, просто добавьте 1,2,3,4 к onClick(), как это onClick(1). Я также обновил ваш jsfiddle http://jsfiddle.net/9rqofbsc/.

function total(button) {
    if (button == 1) {
        $("#dutch_EENCx075_27745").prop("checked", true);
        $("#dutch_WLC110_27750").prop("checked", false);
        $("#esl_EENCx075_27745").prop("checked", false);
        $("#esl_WLC110_27751").prop("checked", false);
    }
    if(button == 2) {
        $("#dutch_EENCx075_27745").prop("checked", true);
        $("#dutch_WLC110_27750").prop("checked", true);
        $("#esl_EENCx075_27745").prop("checked", false);
        $("#esl_WLC110_27751").prop("checked", false);
    }
    if(button == 3) {
        $("#dutch_EENCx075_27745").prop("checked", false);
        $("#dutch_WLC110_27750").prop("checked", false);
        $("#esl_EENCx075_27745").prop("checked", true);
        $("#esl_WLC110_27751").prop("checked", false);
    }
    if(button == 4) {
        $("#dutch_EENCx075_27745").prop("checked", false);
        $("#dutch_WLC110_27750").prop("checked", false);
        $("#esl_EENCx075_27745").prop("checked", true);
        $("#esl_WLC110_27751").prop("checked", true);
    }
    var total = 0;
    var reg = 0;

    if ($('#dutch_EENCx075_27745').is(':checked')) {

        reg = reg + 75;
        window.document.registration.dutch_EENCx075_27745_subtotal.value = 75;
    } else {
        window.document.registration.dutch_EENCx075_27745_subtotal.value = "";
    }

    if ($('#dutch_WLC110_27750').is(':checked')) {

        reg = reg + 232;
        window.document.registration.dutch_WLC110_27750_subtotal.value = 232;
        reg = reg + 75;
        window.document.registration.dutch_EENCx075_27745_subtotal.value = 75;
    } else {
        window.document.registration.dutch_WLC110_27750_subtotal.value = "";
    }

    if ($('#esl_EENCx075_27745').is(':checked')) {

        reg = reg + 75;
        window.document.registration.esl_EENCx075_27745_subtotal.value = 75;
    } else {
        window.document.registration.esl_EENCx075_27745_subtotal.value = "";
    }

    if ($('#esl_WLC110_27751').is(':checked')) {

        reg = reg + 232;
        window.document.registration.esl_WLC110_27751_subtotal.value = 232;
        reg = reg + 75;
        window.document.registration.esl_EENCx075_27745_subtotal.value = 75;
    } else {
        window.document.registration.esl_WLC110_27751_subtotal.value = "";
    }


    total = total + reg;

    window.document.registration.amount1.value = total.toFixed(2); //display the grand total.

}
person Michael St Clair    schedule 31.01.2015
comment
Это работает, и спасибо, Майкл. Я сэкономил несколько строк, сняв галочку со всей группы кнопок с именем «кредит», когда отмечена кнопка другой группы (язык). $('input:radio[name=credit]:checked').prop('checked', false); jsfiddle — это всего лишь фрагмент гораздо большей формы с большим количеством опций, поэтому скрипт довольно длинный, но он работает, и я очень благодарен. - person Gracie; 04.02.2015
comment
Я рад, что смог помочь, я был бы признателен, если бы вы поставили галочку рядом с моим ответом, чтобы принять его как ответ - person Michael St Clair; 04.02.2015