我有2个输入,我想每周计算到两周一次,反之亦然。所以在变化时我想要计算新值。我没有得到正确的值(每周更改需要两周的值乘以2并且每两周更改需要每周的值除以2并且它仅触发一次(每次更改后需要更新)。
HTML:
<div class="frequencies">
<div>
Weekly<br />
<input class="weekly" type="text" value="1000" />
</div>
<br /><br />
<div>
Fortnightly<br />
<input class="fortnightly" type="text" value="2000" />
</div>
</div>
Jquery的:
var weekly = $("input.weekly").val(),
fortnightly = $("input.fortnightly").val();
w2f = parseFloat(weekly, 10) * 2;
f2w = parseFloat(fortnightly, 10) / 2;
$("input.weekly").on("change paste", function() {
$(this).closest('.frequencies').find('input.fortnightly').val(w2f);
});
$("input.fortnightly").on("change paste", function () {
$(this).closest('.frequencies').find('input.weekly').val(f2w);
});
以下是代码的小提琴:https://jsfiddle.net/nh12du38/3/
这应该是一件简单的事情,但我没有看到它。我做错了什么?
答案 0 :(得分:1)
您必须注意,如果为侦听器内部函数外部的变量赋值,则其值将仅在脚本加载时设置一次,并将保持该状态。
您必须在每个侦听器中移动逻辑,因此如果发生了change
或paste
事件,变量将加载一个新的实际值。
$("input.weekly").on("change paste", function() {
w2f = parseFloat($("input.weekly").val(), 10) * 2;
f2w = parseFloat($("input.fortnightly").val(), 10) / 2;
$(this).parent().parent().find('input.fortnightly').val(w2f);
});
$("input.fortnightly").on("change paste", function() {
w2f = parseFloat($("input.weekly").val(), 10) * 2;
f2w = parseFloat($("input.fortnightly").val(), 10) / 2;
$(this).parent().parent().find('input.weekly').val(f2w);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="frequencies">
<div>
Weekly
<br />
<input class="weekly" type="text" value="1000" />
</div>
<br />
<br />
<div>
Fortnightly
<br />
<input class="fortnightly" type="text" value="2000" />
</div>
</div>
&#13;