我有一个很奇怪的问题。我有两个可以输入值的字段,然后我想在两个单独的标签(不同的计算)中显示计算值。
但是,现在只显示其中一个值。
HTML:<input id="btcowned" />
<p>
Fee<br />
<input id="feebox" value="4.5" />
</p>
<p>
Transfer
<label id="totalnetworth" style="font-weight: bold;" />
(no vat)<br />
<label id="totalnetworthVat" style="font-weight: bold;" />
(vat)<br />
</p>
JAVASCRIPT: <script>
$(document).ready(function() {
$('#btcowned').keyup(function() {
updateNumbers();
});
$('#feebox').keyup(function() {
updateNumbers();
});
});
function updateNumbers() {
var chosen = $('#btcowned').val();
var fee = parseFloat($('#feebox').val());
var val = chosen - ((chosen * fee) / 100);
var vatVal = val * (1 + 0.025);
$('#totalnetworth').text(val);
$('#totalnetworthVat').text(vatVal);
alert(vatVal);
}
</script>
totalnetworth工作良好,显示计算值。总净值增值税没有显示任何东西。我还尝试了比写vatVal更简单的东西,比如$('#totalnetworthVat').text('foo')。
但是没有显示,FireBug也没有显示JS错误。
My alert()显示vatVal是一个实数。
任何想法?
我认为问题是自关闭标签:
<label id="totalnetworth" style="font-weight: bold;" />
如果你把它改成:
<label id="totalnetworth" style="font-weight: bold;"></label>
…然后它似乎工作:http://jsfiddle.net/GRFda/
我的理解是,像你这样的自闭标签将无法工作,除非文档类型是xhtml,即使这样,它可能不会工作,如果页面没有提供的MIME类型为text/xml
或application/xhtml+xml
。
我已经做了一堆计算器,这就是为什么我给了它更多的工作。
看看我在jsFiddle中的解决方案。
<style type='text/css'>
table td,
table th {
border: 1px solid #DDD;
padding: 2px 5px;
}
.totalnetworth .value {
font-weight: bold;
}
</style>
<script type='text/javascript'>//<![CDATA[
$(window).load(function(){
$(document).ready(function () {
$('.btcowned').keyup(updateNumbers);
$('.feebox').keyup(updateNumbers);
});
function updateNumbers(e) {
// Preparation
var $calc = $(this).closest('.calculator'),
$results = $calc.find('table'),
chosen = parseFloat($calc.find('.btcowned').val()),
fee = parseFloat($calc.find('.feebox').val()),
vatPercent = 25,
// Calculation
vatRate = vatPercent * 0.01 + 1,
val = chosen - ((chosen * fee) / 100),
vatVal = val * vatRate;
// Representation
$results.find('.totalnetworth .novat').html(isNaN(val) ? '-' : Number(val).toFixed(2));
$results.find('.totalnetworth .wvat').html(isNaN(vatVal) ? '-' : Number(vatVal).toFixed(2));
}
});//]]>
</script>
<div class="calculator">
<label for="btcowned-1">btcowned
<input id="btcowned-1" class="btcowned" value="" />
</label>
<label for="btcowned-1">Fee
<input id="feebox-1" class="feebox" value="4.5" />
</label>
<table>
<tr>
<th>Title</th>
<th>Cost</th>
<th>Cost+VAT</th>
</tr>
<tr class="totalnetworth">
<td>Transfer</td>
<td class="novat value"></td>
<td class="wvat value"></td>
</tr>
</table>
</div>
和一些关于你的代码的注释:
- 不要在脚本中使用ID;
- 只关闭
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
; - 不要相信用户输入会给出正确的数据格式,因为它很容易使你的脚本崩溃; 在你的脚本中,总是尝试将准备和计算部分与表示部分分开,这将使它更干净,并且更容易捕获错误。