我目前正在写一个简单的计算器作为练习。
我有几个输入字段,用户可以在其中输入某些值,然后单击一个按钮,一个函数将被触发,它将执行一些计算并在表中显示输出。
我感兴趣的输入如下:
<p>Total eligible voters:
<input type="text" id="totalVoters" name="totalVoters" placeholder="0">
</p>
<p>Voter turnout:
<input type="text" id="voterTurnout" name="voterTurnout" placeholder="0">
</p>
<p>Percentage of ineligible bulletins:
<input type="text" id="ineligibleBulletins" name="ineligibleBulletins" placeholder="0">
</p>
<br><br>
一旦这些数据被填写,用户必须填写他们希望每个政党收到的选票。我想不出(一个简单的)方法来显示有多少选票仍然下落不明。
例如,如果用户设置totalVoters = 1000,voterTurnout = 50%,ineligibleBulletins = 10%,则未统计的总投票数为(1- 0. 1)(* 0. 5 *1000)= 450。
当用户开始为每个政党的选民填写另一个字段时,假设party 1 = 50,我想(在某个地方)显示剩下的(未统计的)选票,在本例中是400。
我在考虑某种类型的循环,但不能真正弄清楚如何更新unaccountedVotes一旦发生变化。
3条答案
按热度按时间hrirmatl1#
我试图尽可能接近OP原始代码,并使用CSS * 自定义属性 * 和 Javascript 创建了一个混合解决方案。
#input
Package 器,以保存三个CSS * 自定义属性 * 以及当前输入的“投票者”值。input
元素的inline oninput 属性。此JS函数将当前键入的input
值赋给CSS * 自定义属性 *。使用 onchange 也可以,但需要用户先按[Enter],其中 oninput 是立即数。showInput()
,该函数从更新的CSS * 自定义属性 * 中检索当前输入值。它计算当前的 Unaccounted Voters 值,使用函数toDecimals()
将其四舍五入为两位小数,并将其分配给#output
元素以显示中间结果。#output::after
展示了一个小技巧,如何将CSS * 自定义属性 * 的值赋给CSScounter()
,以使用content
显示它。不幸的是counter()
只返回整数值,否则可以跳过使用 Javascript 函数showOutput()
。代码段代码中带有注解...
x一个一个一个一个x一个一个二个一个x一个一个三个一个
fykwrbwg2#
我们会选择一种基于组件的方法
在提出了一个改进的标记之后,一个组件可以通过它的根节点来标识,人们可以query任何可用的根节点并开始每个组件的初始化。
对于OP的情况,我们将实现一个处理函数,该函数是
this
上下文感知的,因此通过bound context接收所有相关组件数据。这里,我们将查询并绑定所有相关元素节点的输入和输出,这允许两者,注册由bind
和call
在组件的初始和更新渲染过程中创建的处理函数。此外,通过
::after
CSS pseudo-element、基于content
的CSS generated content和简单的input
类型事件处理程序(将元素的value
(属性)写入元素的value
属性)呈现其当前范围值,可以增强所选'range'
类型输入元素。在这两种情况下,注册增强型range元素的值更新和注册组件的更新处理,都可以选择
'input'
event。egdjgwm83#
我会尝试设置一个事件监听器来监听输入的变化,然后让它在发生变化时更新输出,但我对编程还是个新手,可能有一个更简单的方法。