我拿到了一个针对JavaScript的FreeCodeCamp项目,其中我必须制作一个罗马数字转换器,但不幸的是,我有几个问题:

  1. 某些CSS代码不会加载,例如边距 colored颜色 和背景线性渐变 colored颜色 .
  2. 具有预期结果的容器并未按预期工作,我希望在用户输入后将其设置为不可见.

我想我犯了一个很大的逻辑错误,但我似乎就是找不到.

感谢您花时间审阅我的代码,英语不是我的母语,所以我希望我已经说清楚了.

以下是我到目前为止的所有代码:

const numberInput = document.getElementById("input");
const convertButton = document.getElementById("convert");
const output = document.getElementById("result");

const romanNumbers = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
const romanLetters = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"];

function convertToRoman(number) {

  if (number === 0) {
    output.textContent = "Roman numerals do not represent zero.";
    return;
  }

  if (isNaN(number) || number < 1 || number > 3999) {
    const errorMessage = number < 1 ? "Please enter a number greater than or equal to 1." :
      number > 3999 ? "Please enter a number less than or equal to 3999." :
      "Please enter a valid number.";
    output.textContent = errorMessage;
    return;
  }

  let roman = "";
  for (let i = 0; i < romanNumbers.length; i++) {
    while (number >= romanNumbers[i]) {
      roman += romanLetters[i];
      number -= romanNumbers[i];
    }
  }
  output.textContent = roman;
  output.parentElement.style.visibility = "visible";
}

convertButton.addEventListener("click", function(event) {
  event.preventDefault(); // Prevent form submission (optional)
  const enteredNumber = parseInt(numberInput.value);
  convertToRoman(enteredNumber);
  // Clear previous output on new conversion (optional):
  // output.textContent = ""; // Uncomment if you prefer to clear the output
});
html {
  height: 100%;
  width: 100%;
}

body {
  margin: 0;
  padding: 0;
  font-family: Rubik, Robot, open sans, sans-serif;
  background-color: linear-gradient(to top right, #00AAFF, #00FF6C);
}

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin: 10px solid black;
  padding: 10px;
  border-radius: 10px;
}

#numberForm {
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
}

.hidden {
  visibility: invisible;
}
<div class="container">
  <h1>Roman Numeral Converter</h1>
  <h3>Made by Yazzine</h3>
</div>

<div class="container">
  <form id="numberForm">
    <p>Enter a number between 1 and 3999:</p>
    <div>
      <input type="number" id="input" placeholder="Your number">
      <button type="submit" id="convert">Convert</button>
    </div>
  </form>
</div>

<div class="container hidden" id="result-container">
  <p>Roman Numeral: <span id="result"></span></p>
</div>

推荐答案

第一个问题是,包含输出的div在页面加载时是可见的,这是因为invisible不是visibility的有效设置.你应该用hidden代替.

另一个问题是,线性渐变没有显示在body上,因为需要在background上设置linear-gradient(),而不是background-color.

最后,你不能在margin上设置 colored颜色 ,只能设置宽度.我想你会改成border-color分.

更正这些问题后,您的代码就可以正常工作了:

const numberInput = document.getElementById("input");
const convertButton = document.getElementById("convert");
const output = document.getElementById("result");

const romanNumbers = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
const romanLetters = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"];

function convertToRoman(number) {
  if (number === 0) {
    output.textContent = "Roman numerals do not represent zero.";
    return;
  }

  if (isNaN(number) || number < 1 || number > 3999) {
    const errorMessage = number < 1 ? "Please enter a number greater than or equal to 1." :
      number > 3999 ? "Please enter a number less than or equal to 3999." :
      "Please enter a valid number.";
    output.textContent = errorMessage;
    return;
  }

  let roman = "";
  for (let i = 0; i < romanNumbers.length; i++) {
    while (number >= romanNumbers[i]) {
      roman += romanLetters[i];
      number -= romanNumbers[i];
    }
  }
  output.textContent = roman;
  output.parentElement.style.visibility = "visible";
}

convertButton.addEventListener("click", function(event) {
  event.preventDefault(); // Prevent form submission (optional)
  const enteredNumber = parseInt(numberInput.value);
  convertToRoman(enteredNumber);
  // Clear previous output on new conversion (optional):
  // output.textContent = ""; // Uncomment if you prefer to clear the output
});
html {
  height: 100%;
  width: 100%;
}

body {
  margin: 0;
  padding: 0;
  font-family: Rubik, Robot, open sans, sans-serif;
  background: linear-gradient(to top right, #00AAFF, #00FF6C);
}

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin: 10px;
  padding: 10px;
  border-radius: 10px;
}

#numberForm {
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
}

.hidden {
  visibility: hidden;
}
<div class="container">
  <h1>Roman Numeral Converter</h1>
  <h3>Made by Yazzine</h3>
</div>

<div class="container">
  <form id="numberForm">
    <p>Enter a number between 1 and 3999:</p>
    <div>
      <input type="number" id="input" placeholder="Your number">
      <button type="submit" id="convert">Convert</button>
    </div>
  </form>
</div>

<div class="container hidden" id="result-container">
  <p>Roman Numeral: <span id="result"></span></p>
</div>

备注:如果您遇到关于css的任何不确定之处,请注意,MDN是最好的参考资源.它将提供所有属性的完整文档以及使用示例.

Javascript相关问答推荐

根据总价格对航班优惠数组进行排序并检索前五个结果- Angular HTTP请求

将状态向下传递给映射的子元素

将自定义排序应用于角形数字数组

如何使用JavaScript将文本插入空div

当作为表达式调用时,如何解析方法decorator 的签名?

引用在HTMLAttributes<;HTMLDivElement>;中不可用

v—自动完成不显示 Select 列表中的所有项目

在Three JS中看不到补间不透明度更改效果

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

在使用REACT更改了CSS类之后,无法更改CSS样式

Nextjs 13.4 Next-Auth 4.2登录(&Quot;凭据&,{});不工作

如何修复错误&语法错误:不能在纯react 项目中JEST引发的模块&之外使用导入语句?

未捕获的不变违规:即使在使用DndProvider之后也应使用拖放上下文

我的NavLink活动类在REACT-ROUTER-V6中出现问题

在高位图中显示每个y轴系列的多个值

使用props 将VUE 3组件导入JS文件

每隔一行文本段落进行镜像(Boustrophedon)

在JS/TS中构造RSA公钥

CSS网格使页面自动滚动

元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但GET:Object.在Reaction项目中