假设我在html表单中有5个选项但你只能选择其中3个选项。我需要完成以下任务:1。计算总价格,2。动态传递设置变量(最终将传递给PHP的json)等于所选选项的名称attr。
我遇到的问题是我在每个选项上使用value =“1”。然后通过静态地使用if else分配变量来定义每次选择另一个选项时更新的价格。在我正在做的每个选择有很多选项可供选择。
我被困在哪里: 要么我要使用name属性并传递5个变量(使用选项:选中),或者有一种方法可以实现这一点,所以我的数据库只需要3列来存储到数据库而不是5。
我希望在页面上的脚本中完成此操作,而不是在PHP中。你能动态地做这个吗,只发送3个以上的JSON变量来传递给php,或者这只是更简单,更快速地发送到5?是的我对javascript和jquery很新:)
<form id = "testform" name = "testform" method="POST" action="test.php">
<select class = "choose" id="choice1">
<option value="0" selected=""></option>
<option value="1"> Choice 1.a</option>
</select>
<select class = "choose" id="choice2">
<option value="0" selected=""></option>
<option value="1"> Choice 1.b</option>
</select>
<select class = "choose" id="choice3">
<option value="0" selected=""></option>
<option value="1"> Choice 1.c</option>
</select>
<select class = "choose" id="choice4">
<option value="0" selected=""></option>
<option value="1"> Choice 1.d</option>
</select>
<select class = "choose" id="choice5">
<option value="0" selected=""></option>
<option value="1"> Choice 1.b</option>
</select>
<label><h4>Total:$</h4> <input style="" type="number" class="num" name="amount" value="0.00" readonly="readonly" /></label>
<script type="text/javascript">
$('select').change(function(){
var form = this.form;
var sum = 0;
var price;
$('select :selected').each(function() {
sum += Number($(this).val());
});
if (sum > 3) {
alert("You can only choose 3 classes");
$('select.choose').each(function() {
$('.choose').val(0);
});
}
if (sum == 1){
price = 80;
}
else if (sum == 2) {
price = 130;
}
else if (sum == 3) {
price = 180;
}
$(".num").val(price);
form.elements['total'] = price;
});
答案 0 :(得分:0)
检查有多少选项的值不是0,确保它不超过3,然后获取这些选择的名称
$('select').on('change', function(){
var selected = $('select').filter(function() {
return parseInt(this.value, 10) !== 0;
}),
sum = selected.length,
price = [80, 130, 180][sum - 1],
names = selected.map(function() {
return this.id; // selects don't seem to have names ?
}).get();
if (sum > 3) {
alert("You can only choose 3 classes");
} else {
$('.num').val(price);
}
console.log(names, sum)
});