我有一个下拉列表,我想要做的是为下拉列表中的项目赋值,然后根据选择的项目在标签中显示这些值。
这是我已经拥有的:
<tr>
<td width="343">Package*</td>
<td colspan="4">
<select class="purple" name="package">
<option value="standard">Standard - €55 Monthly</option>
<option value="standardAnn">Standard - €49 Monthly</option>
<option value="premium">Premium - €99 Monthly</option>
<option value="premiumAnn" selected="selected">Premium - €89 Monthly</option>
<option value="platinum">Platinum - €149 Monthly</option>
<option value="platinumAnn">Platinum - €134 Monthly</option>
</select>
</td>
<tr>
<td width="343">
<p style="font-size:14px;">We bill quarterly/annually in advance</p>
<p style="font-size:14px;">See <a href="#dialog" name="modal">Pricing</a> for more details
</p></td>
<td colspan="4"><label id="total" name="total">Total Cost:</label></td>
我目前使用的jQuery代码将标签的值更改为下拉列表的ACTUAL内容,但是我想将以下值分配给下拉列表的内容:
标准=“每季度165欧元”
StandardAnn =“每年588欧元”
保费=“每季度297欧元”
PremiumAnn =“每年1068欧元”
白金=“每季度447欧元”
PlatinumAnn =“每年1608欧元”
这样,当用户选择某个包时,总价将显示给他们,因为他们要么提前每季度支付,要么每年提前支付。当他们到达付款页面时试图防止冲击! 这是我的jQuery:
$(document).ready(
function() {
$('select[name=package]').change(
function(){
var newText = $('option:selected',this).text();
$('#total').text('Total price: ' + newText);
}
);
} );
我在调整代码方面遇到了一些麻烦,因为我是jQuery的新手,而且我已经面临着完成这项工作的压力。有谁可以帮助我吗?
答案 0 :(得分:1)
您可以创建要显示的文本数组
var AnnualCosts = [];
AnnualCosts['standard'] = "€165 Quarterly";
AnnualCosts['standardAnn'] = "€588 Annually";
...
$(document).ready(
function() {
$('select[name=package]').change(
function(){
var newText = AnnualCosts[$('option:selected',this).val()];
$('#total').text('Total price: ' + newText);
}
);
}
不是最好的练习,但你的整个代码不是。这很快又脏。不那么可维护。
答案 1 :(得分:1)
我花了比预期更长的时间,并且不会重写你的html(无论如何我都记得这样做),但以下方法确实有效:
$(document).ready(
function() {
$('select[name=package]').change(
function(){
var monthly = $('input:checked[name=billPeriod]').val();
var price = $(':selected',this).text();
var price = price.match('[0-9]{2,3}');
if (monthly == 0) {
var recurrence = 'quarterly';
var cost = price * 4;
}
else if (monthly == 1) {
var recurrence = 'annually';
var cost = price * 12;
}
$('#total').text('Total price ('+recurrence+'): €' + cost);
}
);
}
);
<form id="packageChoices" action="" method="post">
<fieldset>
<label for="billPeriod">Bill:</label>
<input type="radio" name="billPeriod" value="0" />Quarterly
<input type="radio" name="billPeriod" value="1" checked />Annually
</fieldset>
<fieldset>
<select class="purple" name="package">
<option value="standard">Standard - €55 Monthly</option>
<option value="standardAnn">Standard - €49 Monthly</option>
<option value="premium">Premium - €99 Monthly</option>
<option value="premiumAnn" selected="selected">Premium - €89 Monthly</option>
<option value="platinum">Platinum - €149 Monthly</option>
<option value="platinumAnn">Platinum - €134 Monthly</option>
</select>
</fieldset>
<fieldset>
<label id="total">Total Price: </label>
</fieldset>
</form>
现场演示:JS Bin
我意识到你已经接受了答案,但是在最后半小时试图记住正则表达式的简单运行似乎是浪费... =)
答案 2 :(得分:0)
基于select字段中显示的值,快速而脏的正则表达式应该可以工作:
var annualCost = 12 * $('option:selected').html().match(/\d+/);
$('#total').html('Total price: €' + annualCost);
同样,这不是最好的做法,但我认为它会起作用。请注意,如果下拉菜单选项中的价格之前有任何其他数字,这将会中断。