2 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
問(wèn)題是在您的公式中,您正在使用inputAssayWeight而不是實(shí)際獲取它的值并使用它。將這兩個(gè)if條件替換為
if (source=="inputPPMtoGrav") {
inputGravtoPPM.value=(valNum*parseFloat(inputAssayWeight.value)/1000).toFixed(4);
}
if (source=="inputGravtoPPM") {
inputPPMtoGrav.value=(valNum*1000/parseFloat(inputAssayWeight.value)).toFixed(4);
}
那應(yīng)該可以解決您的問(wèn)題。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
將所有內(nèi)容包裝在<form>標(biāo)簽中并給它一個(gè)#id。
<form id='main'><!-- EVERYTHING --></form>
將事件綁定"input"到<form>并調(diào)用事件處理程序(即處理觸發(fā)事件的函數(shù))。參考:JavaScript 事件處理
document.forms.main.oninput = inputHandler;
定義function inputHandler()——記得傳遞事件對(duì)象
function inputHandler(event) {...
定義所有變量——參考:在 JavaScript 中獲取表單和表單元素的引用
// Collect all form controls into a NodeList
const field = this.elements;
// Find the element user interacted with
const input = event.target;
// Reference any form control by #id or [name] attribute by prefixing it with `field`
const aW = field.assayWeight;
// Assign a variable to form control values and convert them into a real Number
let AWT = parseFloat(aW.value);
"input"使用if/else流控制語(yǔ)句委托事件。通過(guò)明確地允許特定元素對(duì)事件做出反應(yīng)并通過(guò)簡(jiǎn)單的省略來(lái)隱式地阻止其他元素是稱為事件委托的編程范例的重要部分。
if (input.matches('#assayWeight')) {...
HTML/CSS 布局和樣式具有一個(gè)切換系統(tǒng),它允許用戶輸入“測(cè)定重量”和“PPM”或“Grav”。將鼠標(biāo)懸停在標(biāo)題上,然后單擊一個(gè),然后單擊另一個(gè)以查看切換。請(qǐng)參閱:通過(guò)選中的單選按鈕公開(kāi)表單字段
[name=conv],
.mask {
display: none
}
[name=conv]:checked + fieldset .mask {
display: inline-block;
}
演示
document.forms.convPpmG.oninput = convert;
function convert(event) {
const field = this.elements;
const input = event.target;
const awt = field.aWt;
const ppm = field.pPM;
const grv = field.grv;
const gtp = field.gToP;
const ptg = field.pToG;
let AWT = parseFloat(awt.value);
let PPMin = parseFloat(ppm.value);
let GRVin = parseFloat(grv.value);
if (input.matches('#aWt')) {
// log(AWT, "Assay Weight");
}
if (input.matches('#pPM')) {
// log(PPMin, "PPM Input");
let GRVout = PPMin * AWT / 1000;
// log(GRVout, "Grav Output");
ptg.value = GRVout.toFixed(4);
}
if (input.matches('#grv')) {
// log(GRVin, "Grav Input");
let PPMout = GRVin * 1000 / AWT;
// log(PPMout, "PPM Output");
gtp.value = PPMout.toFixed(4);
}
}
// A utility logger - not required
const log = (data, key = 'Field') => console.log(JSON.stringify(key + ': ' + data));
root,
body {
font: 400 3vw/1.5 Consolas, monospace;
}
fieldset fieldset {
min-height: 20vh;
}
input,
output {
width: 10ch;
margin-right: 5px;
margin-bottom: 8px;
font: inherit;
text-align: right;
}
#aWt {
display: inline-block;
}
[type=reset] {
text-align: center;
}
.switch {
padding: 3px 5px;
}
[type=reset]:hover,
.switch:hover {
color: tomato;
background: rgba(56, 87, 199, 0.4);
cursor: pointer;
}
[name=conv],
.mask {
display: none
}
[name=conv]:checked+fieldset .mask {
display: inline-block;
}
<form id='convPpmG'>
<fieldset>
<legend>PPM / Grav Convertor</legend>
<label>Assay Weight</label>
<input id="aWt" type="number" min='0' value="0">
<input type='reset'>
<br>
<input id='ppmToGrav' name='conv' type='radio'>
<fieldset>
<legend>
<label for='ppmToGrav' class='switch'>PPM to Grav</label>
</legend>
<label class='mask'>
PPM: <input id="pPM" type="number" min='0' value="0">
to Grav: <output id='pToG'>0</output> mg
</label>
</fieldset>
<hr>
<input id='gravToPPM' name='conv' type='radio'>
<fieldset>
<legend>
<label for='gravToPPM' class='switch'>Grav to PPM</label>
</legend>
<label class='mask'>
Grav: <input id="grv" type="number" min='0' value="0">
mg to PPM: <output id='gToP'>0</output>
</label>
</fieldset>
</fieldset>
</form>
添加回答
舉報(bào)