-1

尝试根据单击的按钮将文本框中的值加 1 或减 1。不能上班……不知道怎么了

<!DOCTYPE HTML>
 <html>
 <head>
 <title>Add and Subtract Numbers</title>
 <body>
 <script>
function display(buttonclickedvalue)
{
    switch (buttonclickedvalue)
    {
        case"+"

            var number= parseInt(document.getElementById('numbertxt').value);
            number.value = number + 1;
        break;
        case"-"
            var number1= parseInt(document.getElementById('numbertxt').value);
            number1.value = number1 -1;
        break
    }

}

 </script>
 <form name="calculations">
 <input type = text id="numbertxt">
 </br>
 <input type = button value="+" onclick="display(this.value)">
 <input type = button value="-" onclick="display(this.value)">

 </form>
 </body>
 </head>
 </html>

小提琴Here

4

4 回答 4

3

为什么你甚至会使用只有 2 个选项的案例?

function display(buttonclickedvalue)
{
    var value = parseInt(document.getElementById('numbertxt').value);

    if(buttonclickedvalue == '+')
    {
        value +=  1;
    }
    else
    {
        value -= 1;
    }

    document.getElementById('numbertxt').value = value
}

这样,您只需验证案例一次,而不是两次。(当然,当您需要更多选项时,您必须添加更多验证)。

于 2013-10-03T13:29:37.287 回答
2

代码不起作用的两个原因:

  1. case表达式以 a 结尾:,因此无法成功解析代码。

  2. 您的numberandnumber1变量指的是number,而不是元素,因此分配给它们的.value属性并不能满足您的要求。(它做了一些事情,非常短暂,但没有什么能持续。)

此外,最好总是给出parseInt它的第二个参数,它是解析时应该使用的基数(基数)。

如果你想用switch这个,那么:

function display(buttonclickedvalue)
{
    var numfield = document.getElementById('numbertxt'),
        num      = parseInt(numfield.value, 10) || 0;
    switch (buttonclickedvalue)
    {
        case "+":
            numfield.value = num + 1;
            break;
        default:
            numfield.value = num - 1;
            break;
    }
}

在那里,我添加了缺少的:,用于default:代替case "-":第二个,给定parseInt一个基数,并且0如果由于某种原因该字段包含无法解析为 int 的内容(在这种情况下parseInt将返回NaN,这是错误的,因此|| 0使用该部分代替;有关详细信息,请参阅JavaScript 非常强大的 OR 运算符 (|| )。

但通常只有两种情况时,您会使用ifor 条件运算符:

if

function display(buttonclickedvalue)
{
    var numfield = document.getElementById('numbertxt'),
        num      = parseInt(numfield.value, 10) || 0;
    if (buttonclickedvalue === "+")
    {
        numfield.value = num + 1;
    }
    else
    {
        numfield.value = num - 1;
    }
}

条件运算符:

function display(buttonclickedvalue)
{
    var numfield = document.getElementById('numbertxt'),
        num      = parseInt(numfield.value, 10) || 0;
    numfield.value = num + (buttonclickedvalue === "+" ? 1 : -1);
}

当然,最后可以以牺牲可读性为代价进一步压缩:

function display(buttonclickedvalue)
{
    var numfield = document.getElementById('numbertxt');
    numfield.value = (parseInt(numfield.value, 10) || 0) + (buttonclickedvalue === "+" ? 1 : -1);
}
于 2013-10-03T13:21:26.647 回答
1

您永远不会在某处设置值,您更改了值但不对其进行任何操作。我已经采用了您的功能并对其进行了一些更新:

function display(buttonclickedvalue){
    var currentVal = parseInt(document.getElementById('numbertxt').value, 10); // save current value
    switch (buttonclickedvalue){
        case"+"
            currentVal += 1; // add one. 
        break;
        case"-"
            currentVal -= 1; // subtract one
        break
    }
    // set it back in input (you forgot this:)
    document.getElementById('numbertxt').value = currentVal;
}

此外,case需要:, 并且break应该以 结尾 与; currentVal+=1相同currentVal=currentVal+1,但 imo 更易于阅读。

于 2013-10-03T13:22:01.440 回答
0

试试这个,这会对你有所帮助,这很容易理解

HTML

<input type = text id="numbertxt">
 </br>
 <input type = button value="+" >
 <input type = button value="-" >

JS

$('input[type=button]').click(function(){
    var newnum=eval($('#numbertxt').val());
    if($(this).val()=='+')
    {newnum++;
        $('#numbertxt').val(newnum);
    }else
    {newnum--;
        $('#numbertxt').val(newnum);
    }
     });

小提琴Here

于 2013-10-03T13:39:11.973 回答