2013-10-03 7 views
-1

попытка добавить 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> 

Fiddle Here

+3

Ваши случаи синтаксически неправильно. –

+2

Прежде чем кто-нибудь ответит на ваш вопрос, не могли бы вы принять правильный ответ на свои предыдущие вопросы (если есть)? Если вы продолжаете спрашивать, не возвращаясь, чтобы отметить правильный ответ, люди будут меньше готовы помочь вам в будущем. –

+0

не думал, что у пришлось это сделать. он говорит, что не сказал спасибо или +1. il сделать это сейчас –

ответ

3

Зачем вам использовать только 2 варианта?

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

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

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

Таким образом, вам нужно только проверить корпус один раз, а не дважды. (конечно, вам нужно добавить дополнительные проверки, если вы хотите больше вариантов).

+0

Просто потому, что есть 2 варианта теперь не означает, что их не будет более поздно? – thgaskell

+0

Вот почему я сказал: «Вы должны добавить дополнительные проверки, когда хотите больше вариантов». Я не вижу причин, по которым вы будете использовать случаи. Я нахожу структуру if-then-else, лично, имея лучший обзор. Специально для новичков это может быть лучшим вариантом. – nkmol

2

Две причины, по которым код не работает:

  1. case выражения заканчиваются :, поэтому код не может быть успешно проанализирован.

  2. Ваши number и number1 переменные относятся к числа, а не элемент, и поэтому присваивание .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's Curiously Powerful OR Operator (||)).

Но, как правило, когда есть только два случая, вы будете использовать if или условный оператор:

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); 
} 
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, но имо легче читать.

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

Смежные вопросы