我有一个函数来计算3个输入框之一何时发生变化,然后显示答案。我可以在发生变化时触发该功能,但我无法从每个输入中获取值。下面是html和js片段。
this
JS:
HTML:
<div>
<table>
<tr>
<th></th>
<th>Base</th>
<th class="gen-specific g3 g4 g5 g6">IVs</th>
<th class="gen-specific g3 g4 g5 g6">EVs</th>
<th></th>
<th></th>
</tr>
<tr class="hp" onchange="hp_calculator()">
<td>
<label>HP</label>
</td>
<td>
<input class="base" value="100" />
</td>
<td class="gen-specific g3 g4 g5 g6">
<input class="ivs calc-trigger" value="31" />
</td>
<td class="gen-specific g3 g4 g5 g6">
<input class="evs calc-trigger" type="number" min="0" max="252" step="4" value="0" />
</td>
<td><span class="total">341</span>
</td>
<td></td>
</tr>
</table>
</div>
答案 0 :(得分:2)
首先this
将成为窗口,而不是元素。将元素传递到处理程序中,然后使用参数。
<tr class="hp" onchange="hp_calculator(this)">
然后,您需要更改多个类选择器的类选择器.class1.class2
,然后.text()
更改span
元素的文本。最后一点是您"s"
和ivs
中的evs
:
function hp_calculator(ele) {
var hp = $(ele).find(".base").val()*$(ele).find(".ivs.calc-trigger").val()+$(ele).find(".evs.calc-trigger").val();
$(ele).find(".total").text(hp);
}
注意
通过内联方式提供事件处理程序通常是不好的做法。相反,我建议您直接在JavaScript中附加它们,这样this
将按预期工作。这是一个如何在jQuery(demo)中执行此操作的示例:
$('.hp').change(function(){
var hp = $(this).find(".base").val()*$(this).find(".ivs.calc-trigger").val()+$(this).find(".evs.calc-trigger").val();
$(this).find(".total").text(hp);
});