我目前正在使用贝宝结帐表格。该表格允许用户指定一些选项,并且当他们提交表格时,它将订单提交给贝宝进行处理。
该表单具有<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
中选择的值。
如果用户取消选中该复选框,则禁用并清除srt
和src
。
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/