2015-05-08 5 views
2

У меня есть старый код моих приложений, который с помощью javascript вычисляет что-то, логика заключается в том, что 1 текстовое поле заполнено, другое текстовое поле заполнено автоматически, а когда второе текстовое поле заполнено, это другое текстовое поле вернет text1 - text2, может быть, Вы можете посмотреть на эту скрипку:Выполнить JavaScript Функция onkeyup не работает

HTML:

<label>Price Start</label> 
<input type="number" class="form-control" placeholder="Total Harga Diberikan" required="required" name="price" onkeyup="calculate()" id="price" /> 
<br /> 
<label>Discount</label> 
<input type="number" class="form-control" placeholder="Nominal Potongan" name="jmlvoucher" onkeyup="calculate()" id="jmlvoucher" /> 
<br /> 
<label>Total</label> 
<input type="number" class="form-control" placeholder="Total yang harus dibayarkan" required="required" name="total" id="total" /> 

Javascript:

function calculate(){ 
    var num1 = document.getElementById("price").value; 
    var num2 = document.getElementById("jmlvoucher").value; 

    var sum=parseFloat(num1)-parseFloat(num2); 
    document.getElementById('total').value=sum.toString(); 
} 

http://jsfiddle.net/n4anv5qn/2/

Уже пытаются проверить ошибку, но нет ошибки. Попробуйте запустить его, это не сработает. Любая идея почему?

+1

Вы не ссылаются на скрипку –

+0

жаль ... есть ошибка из StackOverflow –

ответ

3

Там действительно ошибка генерируется в KeyUp обжигают.

Uncaught ReferenceError: calculate is not defined 

На JSFiddle вы решили поставить JavaScript в функцию onLoad, что неправильно. Вместо этого вы должны выбрать No Wrap

См http://jsfiddle.net/n4anv5qn/5/

В соответствии с просьбой, этот код является примером того, как вы можете рассчитать Total, если ваша скидка не заполняется. Просто проверьте, пусто ли значение, которое вы захватили из num2, и установите его значение по умолчанию.

function calculate(){ 
    var num1 = document.getElementById("price").value; 
    var num2 = document.getElementById("jmlvoucher").value; 

    if (num2 == '') 
     num2 = '0'; 

    var sum=parseFloat(num1)-parseFloat(num2); 
    document.getElementById('total').value=sum.toString(); 
} 
+0

Это правильный ответ. Другой вариант - определить глобальную функцию, если он использует событие 'onLoad':' var target = document || окно; target.calculate = function() {/ * ... * /}; ' –

+0

Извините, есть недоразумения, если я печатаю только в текстовом поле 1, необходимо также заполнить третье текстовое поле ... Тогда, если я наберу текстовое поле 2, третье текстовое поле будет вычитать text1 с текстом2 ... также, как написать nowrap в моем php-коде? –

+0

'No Wrap' в контексте JSFiddle просто означает, что не помещайте предоставленный Javascript внутри другого фрагмента кода Javascript. Вы можете увидеть пример Psioniax, где разместить свой Javascript. Я также добавил ваш запрос на ответ. –

0

Вы должны использовать onchange вместо onkeyup. Также поместите свои скрипты прямо перед тегом закрывающего тега.

Вот как это сделать:

<label>Price Start</label> 
 
\t \t <input type="number" class="form-control"name="price" onchange="calculate()" id="price" /> 
 
    <br /> 
 
    <label>Discount</label> 
 
\t  <input type="number" class="form-control" onchange="calculate()" id="jmlvoucher" /> 
 
    <br /> 
 
    <label>Total</label> 
 
\t \t <input type="number" class="form-control" required="required" name="total" id="total" /> 
 

 
    <script> 
 
    function calculate(){ 
 
\t \t var num1 = document.getElementById("price").value; 
 
\t \t var num2 = document.getElementById("jmlvoucher").value; 
 

 
\t \t var sum = parseFloat(num1) - parseFloat(num2); 
 
\t \t document.getElementById('total').value = sum; 
 
    } 
 
    </script>

+0

OnKeyUp также будет работать –

+0

Да, но я изменил его, прежде чем перейти сценарий в нижней части. И IMO 'onchange' лучше в любом случае. –

+2

@ I'mnidhin. 'onkeyup' - это событие клавиатуры, оно будет терпеть неудачу, если пользователь вводит ввод с помощью клавиш со стрелками рядом с вводом (используя мышь). – Zee

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