计算变更输入的新值

时间:2017-04-30 23:13:44

标签: javascript jquery

我有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/

这应该是一件简单的事情,但我没有看到它。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您必须注意,如果为侦听器内部函数外部的变量赋值,则其值将仅在脚本加载时设置一次,并将保持该状态。

您必须在每个侦听器中移动逻辑,因此如果发生了changepaste事件,变量将加载一个新的实际值。

&#13;
&#13;
$("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;
&#13;
&#13;