Javascript 函数返回值';楠';

Javascript 函数返回值';楠';,javascript,Javascript,我正在编写一个代码,检查用户输入并根据它给出结果。但这里的转折点是,字符串也可以包含单词‘打’,也就是十二的意思。查看以下代码后,将清除该内容: HTML: <!DOCTYPE html> <html lang="en-US"> <head> <title>iRock</title> <meta charset="UTF-8"> <link rel="styles

我正在编写一个代码,检查用户输入并根据它给出结果。但这里的转折点是,字符串也可以包含单词‘打’,也就是十二的意思。查看以下代码后,将清除该内容:

HTML:

<!DOCTYPE html>
<html lang="en-US">
    <head>
        <title>iRock</title>
        <meta charset="UTF-8">
        <link rel="stylesheet" type="text/css" href="css.css">
    </head>
    <body>
        <form>
            <label for="numDonut">Enter how many donuts you want:  </label>
            <input type="text" id="numDonut">
            <div id="totalDonuts"></div>
            <div id="submit" onclick="callDonut();">SUBMIT</div>
        </form>
        <script type="text/javascript" src="javascript.js"></script>
    </body>
</html>
现在问题来了:不管我给出什么输入,即使它不包含单词'tide',函数返回NaN,这是没有意义的


可能是什么问题?

您遇到的问题是您试图预定义您的
var numDonutString=document.getElementById('numDonut').value但是,它会获取该值的副本,并且永远不会更新该值

因此,您需要做的是在每次单击
SUBMIT
按钮时获取新值

jsFiddle:


您需要更改函数
callDonut
如下:

function callDonut(){
    document.getElementById('totalDonuts').textContent = getTotalDonuts(document.getElementById('numDonut').value);
}

问题:您没有将输入的新值重新分配到变量
numDonutString

中,问题在于
callDonut
函数中,您得到的文本框值仅在文档加载时出现,因此该值始终为
NaN

window.getTotalDonuts=函数(donutString){
var initialDonutCount=parseInt(donutString);
var最终债务=0;
if(donutString.indexOf('tide')!=-1){
finalDonuts=initialDonutCount*12;
}否则{
finalDonuts=初始未计数;
}
返回最终责任| | 0;
}
window.callDonut=函数(){
//获取输入的甜甜圈的字符串数
var numDonutString=document.getElementById('numDonut').value;
document.getElementById('totalDonuts').textContent=getTotalDonuts(numdoutString);
}

输入您想要的甜甜圈数量:
提交

无法复制,似乎工作正常。请发布您的输入。您确定输入是一个数字吗?您假设
parseInt
将始终返回一个数字-它不会返回。它返回
NaN
,以防无法理解输入并正确强制输入。执行
console.log(initialDonutCount)
在您调用
parseInt
并检查您得到的结果之后。假设我输入数字2,它将返回NaN@Mjh,我在某个地方读到,如果在parseInt中,如果你给出一个同时包含数字和字符串的字符串,它返回的数字的数据类型发生了变化,这是错误的吗?Thnx的解释很多
function getTotalDonuts(donutString){
    alert(donutString);
    var initialDonutCount = parseInt(donutString);
    var finalDonuts = 0;

    if(donutString.indexOf('dozen') != -1)
        finalDonuts = initialDonutCount * 12;
    else
        finalDonuts = initialDonutCount;

    return finalDonuts;
}

function callDonut(){
    document.getElementById('totalDonuts').textContent = getTotalDonuts(document.getElementById('numDonut').value);
}
function callDonut(){
    document.getElementById('totalDonuts').textContent = getTotalDonuts(document.getElementById('numDonut').value);
}