我目前正在使用贝宝结帐表格。该表格允许用户指定一些选项,并且当他们提交表格时,它将订单提交给贝宝进行处理。

该表单具有<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

我想知道什么是处理此问题的最佳方法。我唯一能想到的就是根据用户在<select>下拉列表中选择的内容,使用javascript设置隐藏的表单值。

这是处理此问题的最佳方法,还是有不需要浏览器处理javascript的更好方法?

谢谢!

最佳答案

首先,我想说明一下,必须在服务器上验证浏览器中计算出的所有值。确实没有替代服务器端验证的方法。客户端脚本只能用于改善用户体验。否则,安全漏洞将被利用。


要解决当前的问题,您可以利用以下事实:发布表单时未提交禁用的输入。因此,如果用户未选择进行定期付款,则srt将永远不会过帐。
从禁用和隐藏的srt开始。
隐藏的输入src开头应为0
添加“定期付款?”复选框。
如果用户选中该复选框,请启用并通过Javascript显示srt
src的值设置为等于用户在srt中选择的值。
如果用户取消选中该复选框,则禁用并清除srtsrc


DEMO

标记:

<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());
});

关于javascript - 我是否将Javascript用于HTML <select>需要影响两个变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7389866/

10-12 00:21