Нужно сложить итоги списка выбора и вычесть, если убрали - PullRequest
1 голос
/ 01 февраля 2011

Это код, который я использую для вычисления суммы двух значений (пример ниже)

Это работает в определенной степени.Он сложит два вместе, но только если сначала будет выбран #edit-submitted-test, и даже тогда он будет показывать NaN, пока я не выберу #edit-submitted-test-1.

. Я хочу, чтобы он вычислил сумму полей и показал суммуlive, то есть значение edit-submitted-test-1 покажет 500, затем, если я выберу другое поле, оно обновится до 1000.Если я уберу один выбор, он вычтет его и вернется к 500.Любые идеи будут полезны, спасибо!

Drupal.behaviors.bookingForm = function (context) {
// some debugging here, remove when you're finished
console.log('[bookingForm] started.');

// get number of travelers and multiply it by 100
function recalculateTotal() {

    var count = $('#edit-submitted-test').val();
    count = parseFloat( count );
    var cost = $('#edit-submitted-test-1').val();
    cost = parseFloat( cost );
    $('#edit-submitted-total').val( count + cost );
}

// run recalculateTotal every time user enters a new value
var fieldCount = $('#edit-submitted-test');
var fieldCount = $('#edit-submitted-test-1');
fieldCount.change( recalculateTotal );

// etc ...
};

РЕДАКТИРОВАТЬ

По какой-то причине это нарушает мой условный модуль Drupal Webform в Firefox, но работает в Google Chrome.

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

Используемый мной скрипт:

Drupal.behaviors.bookingForm = function (context) {
// some debugging here, remove when you're finished
console.log('[bookingForm] started.');

// get number of travelers and multiply it by 100
function recalculateTotal() {

var course43 = $('#edit-submitted-transfer-i-would-like-to-arrange-a-transfer-to-my-accomodation-from').val();
    course43 = course43 ? parseFloat(course43) : 0;
    var course44 = $('#edit-submitted-insurance-visas-and-confirmation-would-you-like-us-to-send-your-confirmation-of-booking-by-dhl-at-cost-of-70-for-europe-and-90-for-the-rest-of-the-world').val();
    course44 = course44 ? parseFloat(course44) : 0;
    var course40 = $('#edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-30').val();
    course40 = course40 ? parseFloat(course40) : 0;
    var course41 = $('#edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-31').val();
    course41 = course41 ? parseFloat(course41) : 0;
    var course42 = $('#edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-32').val();
    course42 = course42 ? parseFloat(course42) : 0
    var course2 = $('#edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for-2').val();
    course2 = course2 ? parseFloat(course2) : 0;
    var course4 = $('#edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for-4').val();
    course4 = course4 ? parseFloat(course4) : 0;
    var course5 = $('#edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for-5').val();
    course5 = course5 ? parseFloat(course5) : 0
    var course6 = $('#edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for-6').val();
    course6 = course6 ? parseFloat(course6) : 0;
    var course30 = $('edit-submitted-course-details-when-would-you-like-to-start-30').val();
    course30 = course30 ? parseFloat(course30) : 0;
    var course31 = $('edit-submitted-course-details-when-would-you-like-to-start-31').val();
    course31 = course31 ? parseFloat(course31) : 0;
    var course = $('#edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for').val();
    course = course ? parseFloat(course) : 0;
    var course7 = $('#edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-7').val();
    course7 = course7 ? parseFloat(course7) : 0;
    var course3 = $('#edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-3').val();
    course3 = course3 ? parseFloat(course3) : 0;
    var course12 = $('#edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-12').val();
    course12 = course12 ? parseFloat(course12) : 0;
    var course13 = $('#edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-13').val();
    course13 = course13 ? parseFloat(course13) : 0;
    var course9 = $('#edit-submitted-intensive-option-two-how-many-weeks-would-you-like-the-course-for-9').val();
    course9 = course9 ? parseFloat(course9) : 0;
    var course8 = $('#edit-submitted-intensive-option-two-how-many-weeks-would-you-like-the-course-for-8').val();
    course8 = course8 ? parseFloat(course8) : 0;
    var course10 = $('#edit-submitted-intensive-option-two-how-many-weeks-would-you-like-the-course-for-10').val();
    course10 = course10 ? parseFloat(course10) : 0;
    var course11 = $('#edit-submitted-intensive-option-two-how-many-weeks-would-you-like-the-course-for-11').val();
    course11 = course11 ? parseFloat(course11) : 0;
    var other1 = $('#edit-submitted-other-options-would-you-like-to-purchase-a-pre-arrival-online-learning-course').val();
    other1 = other1 ? parseFloat(other1) : 0;
    var other2 = $('#edit-submitted-other-options-please-select-number-of-weeks').val();
    other2 = other2 ? parseFloat(other2) : 0;
    var w1 = $('#edit-submitted-accomodation-kings-twin-weeks').val();
    w1 = w1 ? parseFloat(w1) : 0;
    var w2 = $('#edit-submitted-accomodation-haynt-singleensuite-weeks').val();
    w2 = w2 ? parseFloat(w2) : 0;
var w3 = $('#edit-submitted-accomodation-queens-singleensuite-weeks').val();
    w3 = w3 ? parseFloat(w3) : 0;
var w4 = $('#edit-submitted-accomodation-queens-singleprivate-weeks').val();
    w4 = w4 ? parseFloat(w4) : 0;
var w5 = $('#edit-submitted-accomodation-haynt-singlelarge-weeks').val();
    w5 = w5 ? parseFloat(w5) : 0;
var w6 = $('#edit-submitted-accomodation-homestay-twinsupbd-weeks').val();
    w6 = w6 ? parseFloat(w6) : 0;
var w7 = $('#edit-submitted-accomodation-homestay-twinstandardb-weeks').val();
    w7 = w7 ? parseFloat(w7) : 0;
var w8 = $('#edit-submitted-accomodation-homestay-supbd-weeks').val();
    w8 = w8 ? parseFloat(w8) : 0;
var w9 = $('#edit-submitted-accomodation-homestay-standardplusbd-weeks').val();
    w9 = w9 ? parseFloat(w9) : 0;
var w10 = $('#edit-submitted-accomodation-homestay-twinstandardbd-weeks').val();
    w10 = w10 ? parseFloat(w10) : 0;
var w11 = $('#edit-submitted-accomodation-homestay-twinstandardplusb-weeks').val();
    w11 = w11 ? parseFloat(w11) : 0;
var w12 = $('#edit-submitted-accomodation-homestay-standardbd-weeks').val();
    w12 = w12 ? parseFloat(w12) : 0;
var w13 = $('#edit-submitted-accomodation-catholic-singleshared-weeks').val();
    w13 = w13 ? parseFloat(w13) : 0;
var w14 = $('#edit-submitted-accomodation-catholic-singleprivate-weeks').val();
    w14 = w14 ? parseFloat(w14) : 0;
var w15 = $('#edit-submitted-accomodation-homestay-supb-weeks').val();
    w15 = w15 ? parseFloat(w15) : 0;
var w16 = $('#edit-submitted-accomodation-homestay-standardplusb-weeks').val();
    w16 = w16 ? parseFloat(w16) : 0;
var w17 = $('#edit-submitted-accomodation-homestay-ind-weeks').val();
    w17 = w17 ? parseFloat(w17) : 0;
var w18 = $('#edit-submitted-accomodation-homestay-twinsupb-weeks').val();
    w18 = w18 ? parseFloat(w18) : 0;
var w19 = $('#edit-submitted-accomodation-haynt-singlestandard-weeks').val();
    w19 = w19 ? parseFloat(w19) : 0;
var w20 = $('#edit-submitted-accomodation-homestay-singlebbstd-weeks').val();
    w20 = w20 ? parseFloat(w20) : 0;
var w21 = $('#edit-submitted-accomodation-homestay-twinstandardplusbd-weeks').val();
    w21 = w21 ? parseFloat(w21) : 0;
var w22 = $('#edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-5').val();
    w22 = w22 ? parseFloat(w22) : 0;
var w23 = $('#edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-11').val();
    w23 = w23 ? parseFloat(w23) : 0;
var w24 = $('##edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-2').val();
    w24 = w24 ? parseFloat(w24) : 0;
var w25 = $('#edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-8').val();
    w25 = w25 ? parseFloat(w25) : 0;
var w26 = $('#edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-3').val();
    w26 = w26 ? parseFloat(w26) : 0;
var w27 = $('#edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-7').val();
    w27 = w27 ? parseFloat(w27) : 0;
var w28 = $('#edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-1').val();
    w28 = w28 ? parseFloat(w28) : 0;
var w29 = $('#edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-6').val();
    w29 = w29 ? parseFloat(w29) : 0;
var w30 = $('#edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-4').val();
    w30 = w30 ? parseFloat(w30) : 0;
    $('#edit-submitted-courses-cost').val( course2 + course4 + course5 + course6 + course + course7 + other1 + other2 + course3 + course12 + course13 + course9 + course8 + course10 + course11 + course30 + course31 + course40 + course41 + course42 );
 $('#edit-submitted-accomodation-cost').val( w1 + w2 + w3 + w4 + w5 + w6 + w7 + w8 + w9 + w10 + w11 + w12 + w13 + w14 + w15 + w16 + w17 + w18 + w19 + w20 + w21 + w22 + w23 + w24 + w25 + w26 + w27 + w28 + w29 + w30 );
$('#edit-submitted-transfer-insurance-costs').val( course43 + course44 );
}

// run recalculateTotal every time user enters a new value
var fieldCount = $('#edit-submitted-insurance-visas-and-confirmation-would-you-like-us-to-send-your-confirmation-of-booking-by-dhl-at-cost-of-70-for-europe-and-90-for-the-rest-of-the-world, #edit-submitted-transfer-i-would-like-to-arrange-a-transfer-to-my-accomodation-from, #edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-32, #edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-31, #edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-30, #edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for-5, #edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for-4, #edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-7, #edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for, #edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for-6, #edit-submitted-course-details-how-many-weeks-would-you-like-the-course-for-2, #edit-submitted-other-options-please-select-number-of-weeks, #edit-submitted-other-options-would-you-like-to-purchase-a-pre-arrival-online-learning-course, #edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-3, #edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-12, #edit-submitted-intensive-option-one-how-many-weeks-would-you-like-the-course-for-13, #edit-submitted-intensive-option-two-how-many-weeks-would-you-like-the-course-for-9, #edit-submitted-intensive-option-two-how-many-weeks-would-you-like-the-course-for-8, #edit-submitted-intensive-option-two-how-many-weeks-would-you-like-the-course-for-10, #edit-submitted-intensive-option-two-how-many-weeks-would-you-like-the-course-for-11, edit-submitted-course-details-when-would-you-like-to-start-30, edit-submitted-course-details-when-would-you-like-to-start-31, #edit-submitted-accomodation-kings-twin-weeks, #edit-submitted-accomodation-haynt-singleensuite-weeks, #edit-submitted-accomodation-queens-singleensuite-weeks, #edit-submitted-accomodation-queens-singleprivate-weeks, #edit-submitted-accomodation-haynt-singlelarge-weeks, #edit-submitted-accomodation-homestay-twinsupbd-weeks, #edit-submitted-accomodation-homestay-twinstandardb-weeks, #edit-submitted-accomodation-homestay-supbd-weeks, #edit-submitted-accomodation-homestay-standardplusbd-weeks, #edit-submitted-accomodation-homestay-twinstandardbd-weeks, #edit-submitted-accomodation-homestay-twinstandardplusb-weeks, #edit-submitted-accomodation-homestay-standardbd-weeks, #edit-submitted-accomodation-catholic-singleshared-weeks, #edit-submitted-accomodation-catholic-singleprivate-weeks, #edit-submitted-accomodation-homestay-supb-weeks, #edit-submitted-accomodation-homestay-standardplusb-weeks, #edit-submitted-accomodation-homestay-ind-weeks, #edit-submitted-accomodation-homestay-twinsupb-weeks, #edit-submitted-accomodation-haynt-singlestandard-weeks, #edit-submitted-accomodation-homestay-singlebbstd-weeks, #edit-submitted-accomodation-homestay-twinstandardplusbd-weeks, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-5, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-11, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-2, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-8, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-3, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-7, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-1, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-6, #edit-submitted-accomodation-how-many-weeks-accommodation-do-you-require-4') .change( recalculateTotal );

// etc ...
};

Моя форма здесь http://www.healthybrighton.co.uk/wse/node/1

Есть идеи, как это исправить?

1 Ответ

3 голосов
/ 01 февраля 2011

Добавить дополнительную проверку:

count = count ? parseFloat(count) : 0;

Если count пусто (или, более конкретно, оценивается как false), ему будет присвоено 0.Сделайте то же самое для cost.

Или, если элементы выбора имеют определенное значение, выбранное по умолчанию, вы можете проверить это, например,

 count = (count !== 'defaultValue') ? parseFloat(count) : 0;

Кстати.вы назначаете обработчик change неправильно.Это должно быть:

$('#edit-submitted-test, #edit-submitted-test-1').change( recalculateTotal );

В противном случае вы будете назначать обработчику change только последнее значение fieldCount, которое равно $('#edit-submitted-test-1').

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