摄氏到华氏的转换-JavaScript

摄氏到华氏的转换-JavaScript,javascript,Javascript,我正在制作塞尔修斯到法伦海特的计算器。我的密码笔在这里: 我试图这样做,如果celcius输入处于活动状态,则会调用convert to farenheit函数,反之亦然,并且只有在单击submit按钮时才会发生转换。 我还为活动表单id尝试了if/else语句,但该语句不起作用 代码如下: HTML: 我写这个只是为了你的演示 function getElm(id){ return document.getElementById(id); } function readValue(id)

我正在制作塞尔修斯到法伦海特的计算器。我的密码笔在这里: 我试图这样做,如果celcius输入处于活动状态,则会调用convert to farenheit函数,反之亦然,并且只有在单击submit按钮时才会发生转换。 我还为活动表单id尝试了if/else语句,但该语句不起作用

代码如下:

HTML:

我写这个只是为了你的演示

function getElm(id){
  return document.getElementById(id);
}

function readValue(id){
  return getElm(id).value;
}

function updateHtml(text,id){
  getElm(id).innerHTML  = text;
}


function convertCToF(c) {
  var f = c * (9 / 5) + 32;
  return f;
}

function convertFToC(f) {
  var c = (f - 32) * 5 / 9;
  return c;
}

function sequnce(){
  var val =  readValue(activeId);
  var convertedVal = activeFn(val);
  updateHtml("Result: "+ convertedVal + activeSuffix,'result')
}

var activeFn = convertCToF;
var activeId = 'cInput';
var activeSuffix = "℉"

getElm('cInput').onfocus = function(){
  activeFn = convertCToF;
  activeId = 'cInput';
  activeSuffix = "℉"
}

getElm('fInput').onfocus  = function(){
  activeFn = convertCToF;
  activeId = 'fInput';
  activeSuffix = "℃"
}

getElm("cInput").oninput = sequnce;
getElm("fInput").oninput = sequnce;
getElm("submit").oninput = sequnce;
我已经更正了您的评论,并指出了改进的地方、原因和内容,但似乎有人删除了我的评论。由于还没有一个具体的答案,我将把它转移到这里

如果不希望即时更新,请删除以下两行:

document.getElementById("cInput").oninput = function() {convertCToF()};
document.getElementById("fInput").oninput = function() {convertFToC()};
而是根据最后使用的输入框决定脚本将运行的转换模式

var conversionFn;
document.querySelector('#cInput').onfocus = function(){
    conversionFn = convertCToF;
};
document.querySelector('#fInput').onfocus = function(){
    conversionFn = convertFToC; 
};
注意:在您的转换函数中,以下行是无用的,请删除它们

c = parseInt(c);
f = parseInt(f);
在表达式中使用时,变量将被强制转换为适当的值-如果希望显式,则应在使用值执行计算之前进行此转换

»另请参见:作为这方面的另一个示例

接下来为按钮设置一个监听器,请注意,您不能简单地将conversionFn附加到事件处理程序本身,因为这将立即分配一个不变的引用或未定义的引用,这是没有用的-相反,将变量封装在新函数闭包的作用域中

document.querySelector('#submit').onclick = function(){
    conversionFn();  
};

请改用这些函数

function getFahrenheitFromCelsius(celsius){
   return (celsius * (9 / 5)) + 32;
}

function getCelsiusFromFahrenheit(fahrenheit){
   return (fahrenheit - 32) * (5 / 9);
}

问题是,当您单击“提交”时,两个输入字段都失去焦点,而按钮处于活动状态。你需要听每个输入的onfocus,并记下最后点击的是哪个输入。我已经改变了问题来解释这一点。谢谢:
document.querySelector('#submit').onclick = function(){
    conversionFn();  
};
function getFahrenheitFromCelsius(celsius){
   return (celsius * (9 / 5)) + 32;
}

function getCelsiusFromFahrenheit(fahrenheit){
   return (fahrenheit - 32) * (5 / 9);
}