javascript - 编写二进制到十进制转换形式的程序 - 什么不适用于我的代码? (JavaScript 和 HTML5)

标签 javascript html forms

我有一个像这样的简单 HTML 表单

<form class="TextCenter" onSubmit="ConversionScript">
    <input type="radio" name="Conversion" value="BintoDec" checked onClick="document.getElementById('stringToConvert').value='10000001 to 129';" /> Binary to Decimal
        <br />
    <input type="radio" name="Conversion" value="DectoBin" onClick="document.getElementById('stringToConvert').value='129 to 10000001'"/> Decimal to Binary
        <br />
        <br />
    String to Convert: 
    <input type="text" id="StringToConvert" value="10000001 to 129" onClick="document.getElementById('stringToConvert').value=''" />
        <br />
        <br />
    <input type="submit" />
</form>

当用户选择输入类型时,他们会输入一个字符串,例如“10000000”或“129”。然后,在提交表单时,它会根据用户的选择通过 JavaScript 进行转换,如下所示:

/* Misc. Global functions and variables (not used on their own or by one singular thing) */
function GetRadioValue() {
    var inputs = document.getElementsByName("Conversion");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            return inputs[i].value;
        }
    }
}

var stringToConvertRaw = document.getElementById("StringToConvert");
var stringToConvert = parseFloat(stringToConvertRaw.replace(/\D/g,''));
/* End Section */
/* Main Handler Function (initates lower level functions) */
function ConversionScript() {
    var radioValue = GetRadioValue();

    if (radioValue == "BintoDec")
    {
        BinaryToDecimal();
    }
    else if (radioValue == "DecToBin")
    {
        DecimalToBinary();
    }
}
/* End Section */
/* Function to Convert Binary to Decimal */
function BinaryToDecimal() {
    var conversionArray = stringToConvert.split('').reverse();
    var decimalSum = 0;

    for (var i = 0; i < conversionArray.length; i++) {
        if (conversionArray[i] === 1) {
            decimalSum += Math.pow(2, i);
        }
    }

    alert("The binary string " + stringToConvert + " is " + decimalSum + " .");
}
/* End Section */

但是,由于某种原因,在提交表单时,除了页面重新加载之外没有任何反应。没有警报,什么都没有。我的代码语法有问题吗(我一直在使用 Java,所以有可能)或者我是否犯了其他类型的错误? (我已经检查了一百遍,但没有发现问题,所以...我认为一些新鲜的眼睛可能会有所帮助。)

最佳答案

由于您并没有真正提交表单,我会将您的提交输入转换为按钮并将 onSubmit 属性移动到按钮上的 onclick 属性。

<form class="TextCenter">
    <input type="radio" name="Conversion" value="BintoDec" checked onClick="document.getElementById('stringToConvert').value='10000001 to 129';" /> Binary to Decimal
    <br />
    <input type="radio" name="Conversion" value="DectoBin" onClick="document.getElementById('StringToConvert').value='129 to 10000001'" /> Decimal to Binary
    <br />
    <br /> String to Convert:
    <input type="text" id="StringToConvert" value="10000001 to 129" onClick="document.getElementById('stringToConvert').value=''" />
    <br />
    <br />
    <button type="button" onclick="ConversionScript()" />Submit</button>
</form>

话虽如此,向标记添加 onclick 和 onsubmit 属性通常被认为是一种不好的做法。您应该将所有内容与 JavaScript 中的 even 监听器绑定(bind)。

另外,你的脚本中有一些语法错误,所以我在这里清理了它们:

/* Misc. Global functions and variables (not used on their own or by one singular thing) */
function GetRadioValue() {
    var inputs = document.getElementsByName("Conversion");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            return inputs[i].value;
        }
    }
}

var stringToConvertRaw = document.getElementById("StringToConvert").value;
var stringToConvert = parseFloat(stringToConvertRaw.replace(/\D/g,''));
/* End Section */
/* Main Handler Function (initates lower level functions) */
function ConversionScript() {
    var radioValue = GetRadioValue();

    if (radioValue == "BintoDec")
    {
        BinaryToDecimal();
    }
    else if (radioValue == "DecToBin")
    {
        DecimalToBinary();
    }
}
/* End Section */
/* Function to Convert Binary to Decimal */
function BinaryToDecimal() {
    var conversionArray = stringToConvert.toString().split('').reverse();
    var decimalSum = 0;

    for (var i = 0; i < conversionArray.length; i++) {
        if (conversionArray[i] === 1) {
            decimalSum += Math.pow(2, i);
        }
    }
  }

关于javascript - 编写二进制到十进制转换形式的程序 - 什么不适用于我的代码? (JavaScript 和 HTML5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30408807/

相关文章:

javascript - 表单的 Post 请求将空的 ImmutableMultiDict 返回到 Flask

javascript - 为页面标题提供默认值

html - 选择标签不显示在我的表单上

html - 在同一行问题中布置具有不同高度的不同列

javascript - 克隆链接并将其附加到容器,但附加整个 URL — 而不是链接文本

javascript - JS - 如何将所有键转换为其值(从对象)

javascript - 我可以从父页面修改 iframe 中的元素吗?

javascript - 基于 expressionProperty 更改 Angular Formly 上的模型绑定(bind)

javascript - 使用 HTML 中的 Forms 计算总价

mysql - MySQL 的另一个问题 - 简单的注册表显示空白屏幕,没有错误