Должен ли я использовать JavaScript для HTML <select>необходимо влиять на две переменные? - PullRequest
0 голосов
/ 12 сентября 2011

В настоящее время я работаю над формой оплаты PayPal.Форма позволяет пользователю указать несколько параметров, и когда они отправляют форму, она отправляет заказ в PayPal для обработки.

Форма имеет выпадающий список <select>, который позволяет пользователю выбирать, сколько раз онихочу подписку повторить.Это настроено так:

<select name="srt">                         <!-- User specifies amount of times payment should recur -->
    <option value="1"></option>
    <option value="2"></option>  
    <option value="3"></option>  
</select>
<input type="hidden" name="src" value="1">   <!-- Specifies that payment should be recurring-->

Это работает в большинстве случаев, однако, когда пользователь выбирает первый вариант с помощью srt value="1", PayPal вместо этого хочет, чтобы это было отправлено с srtпусто или опущено и src (скрытый ввод под формой) с value="0".Причина этого, по-видимому, заключается в том, что если платеж повторяется 1 раз, то есть взимать плату с клиента только один раз, то это вовсе не повторяющийся платеж, поэтому srt недействителен и вместо него src, который указываетесли платежи будут повторяться или нет, следует установить значение 0.

Мне интересно, как лучше всего справиться с этим.Единственное, о чем я могу думать, это использовать javascript для установки скрытых значений формы в зависимости от того, что пользователь выбирает в выпадающем списке <select>.

Это лучший способ справиться с этим или есть лучшийспособ, который не требует браузера для обработки JavaScript?

Спасибо!

1 Ответ

1 голос
/ 12 сентября 2011

Прежде всего я хотел бы прояснить, что все значения, вычисленные в браузере , должны проверяться на сервере. На самом деле не заменит для проверки на стороне сервера. Клиентские сценарии должны использоваться только для улучшения взаимодействия с пользователем. Если этого не сделать, дыра в безопасности ждет своего использования.

  1. Для решения данной проблемы вы можете использовать тот факт, что отключенные входные данные не отправляются при публикации формы. Таким образом, если пользователь не выберет регулярный платеж, srt никогда не будет опубликован.
  2. Начните с srt, как отключенного, так и скрытого.
  3. Скрытый ввод src должен иметь значение 0 для начала.
  4. Добавить "Периодический платеж?" флажок к форме.
  5. Если пользователь установит флажок, включите и покажите srt через Javascript.
  6. Установите значение src равным значению, выбранному пользователем в srt.
  7. Отключить и очистить srt и src, если пользователь когда-либо снимает флажок.

DEMO

Markup:

<p><input type="checkbox" value="recurring" id="recurring"/>Recurring Payment?</p>
<select disabled id="srt" name="srt">                         
    <option selected value="2">2</option>  
    <option value="3">3</option>  
</select>
<input type="hidden" id="src" name="src" value="0"> 

JQuery:

$('#recurring').click(function() {
    var $srt = $('#srt'),
        $src = $('#src');
    if (this.checked) {
        $srt.prop('disabled', false).toggle();
        $src.val($srt.val());
    } else {
        $srt.prop('disabled', true).toggle();
        $src.val(0);
    }
});

$('#srt').change(function() {
    $('#src').val($(this).val());
});
...