2017-07-18 11 views
0

合計が10以上であるかどうかをチェックするifステートメントとtotalという変数を作成しましたが、テキストを書きますが、変数の合計を変更するとifステートメントがリフレッシュされません。その場合には、イベントを使用する必要があるが、私は、関数を作成し、更新値を持つボタンのonclickイベントでそれを呼び出す必要がどのようにif文リフレッシュjavascript

var price = 5; 
 

 
var quantity = 0; 
 

 
var ldiscountrate = 0.05; 
 

 
var hdiscountrate = 0.1; 
 

 
var total = 0; 
 

 
var oldtotal = price * quantity; 
 

 
if (oldtotal >= 10) { 
 
    discounttotal = total * ldiscountrate; 
 
    document.write("you have a discount total was " + oldtotal + "total after discount " + total); 
 
} 
 

 
else if (oldtotal >= 15) { 
 
    total = oldtotal * hdiscountrate; 
 
    document.write("you have a discount total was " + oldtotal + "total after discount " + total); 
 
} 
 

 
else { 
 

 
    total = oldtotal 
 
    document.write("you don't have a discount the total is " + total + "$"); 
 

 
}
<!DOCTYPE html> 
 
<!-- 
 
To change this license header, choose License Headers in Project Properties. 
 
To change this template file, choose Tools | Templates 
 
and open the template in the editor. 
 
--> 
 
<html> 
 
    <head> 
 
     <title>Shopping</title> 
 
     <script type="text/javascript" src="JavaScript.js"></script> 
 
    </head> 
 
    <body> 
 
     
 
     <button type="button" onclick="var quantity+1">Add one item</button> 
 
     <button type="button" onclick="var quantity-1">Remove one item</button> 
 
     
 
    </body> 
 
</html>

+0

あなたは* *使用している:ここではサンプル(私は結果を表示するdiv要素を使用することに注意)がありますイベント。私はあなたが機能を使用することをお勧めします。 – Bergi

+0

'var quantity + 1'は構文エラーです – Bergi

+1

あなたのコードは、特に指示しない限り、一度だけ実行されます。 [functions](https://www.w3schools.com/js/js_functions.asp)についてまだ学んだことがありますか?あなたのコードがいくつかを生成しているので、開発ツールのコンソールでエラーをチェックすることもできます。 [freeCodeCamp](https://freecodecamp.com)は素晴らしい学習リソースです。 – Gavin

答えて

0

知りませんでした。このような何かを:非常にうまく機能していない

var price = 5; 
 

 
var quantity = 0; 
 

 
var ldiscountrate = 0.05; 
 

 
var hdiscountrate = 0.1; 
 

 
var total = 0; 
 

 
var oldtotal = price * quantity; 
 

 

 
function updateQuantity(increasedQuantity){ 
 
    quantity = increasedQuantity; 
 
    ldiscountrate = 0.05; 
 
    hdiscountrate = 0.1; 
 
    total = 0; 
 
    oldtotal = price * quantity; 
 

 
    if (oldtotal >= 10) { 
 
     discounttotal = total * ldiscountrate; 
 
     document.getElementById('result').innerHTML = "you have a discount total was " + oldtotal + "total after discount " + total; 
 
    } 
 

 
    else if (oldtotal >= 15) { 
 
     total = oldtotal * hdiscountrate; 
 
     document.getElementById('result').innerHTML = "you have a discount total was " + oldtotal + "total after discount " + total; 
 
    } 
 

 
    else { 
 

 
     total = oldtotal; 
 
     document.getElementById('result').innerHTML = "you don't have a discount the total is " + total + "$"; 
 

 
    } 
 
}
<!DOCTYPE html> 
 
<!-- 
 
To change this license header, choose License Headers in Project Properties. 
 
To change this template file, choose Tools | Templates 
 
and open the template in the editor. 
 
--> 
 
<html> 
 
    <head> 
 
     <title>Shopping</title> 
 
     <script type="text/javascript" src="JavaScript.js"></script> 
 
    </head> 
 
    <body> 
 
     
 
     <button type="button" onclick="updateQuantity(quantity+1)">Add one item</button> 
 
     <button type="button" onclick="updateQuantity(quantity-1)">Remove one item</button> 
 
     <div id="result"></div> 
 
    </body> 
 
</html>

あなたはそれを表示する方法がわからない、しかしdocument.write、あなたはそれを変更する必要があります。

+0

あなたのコードでは、あなたが使用していた 'document.write()'のために、 –

+0

のいずれかを押した後にボタンが絶望的に​​なりました。 – Dij

+0

@AhmedYasir、答えを確認し、助けがあれば受け入れを検討してください。乾杯! – Dij

0

これはあなたを助け、jqueryライブラリを含めることを忘れないでください。 必要に応じて計算を変更することができます。 私は理解したとおりに行っています。

<div > 
    <button type="button" onclick="changequantity('add');">Add one item</button> 
    <button type="button" onclick="changequantity('remove');">Remove one item</button> 
    <input type="hidden" id="quantity" value="0"> 
    <input type="hidden" id="total" value="0"> 
</div> 

<script> 
function changequantity(dothis){ 
    var price = 5; 
    var ldiscountrate = 0.05; 
    var hdiscountrate = 0.1; 
    var quantity = $('#quantity').val(); 
    var total = $('#total').val(); 
    if(dothis=="add"){ 
     quantity++; 
    } 
    if(dothis=="remove"){ 
     quantity--; 
    } 

    var oldtotal = price * quantity; 

    if (oldtotal >= 10) { 
     total = oldtotal - (oldtotal * ldiscountrate); 
     console.log("you have a discount total was " + oldtotal + " total after discount " + total); 
    }else if (oldtotal >= 15) { 
     total = oldtotal * hdiscountrate; 
     console.log("you have a discount total was " + oldtotal + " total after discount " + total); 
    }else{ 
     total = oldtotal; 
     console.log("you don't have a discount the total is " + total + "$"); 
    } 
    $('#quantity').val(quantity); 
    $('#total').val(total); 
} 
</script> 
0

まず第一に、代わりにボタンのonclickハンドラでごquantity変数を探しているのは、関数を参照する必要があります。これは、onclickには、イベントハンドラまたはイベントコールバックとも呼ばれる関数が必要であるためです。

quantityを増やし、それを減らすものをremoveItem()とすると、addItem()関数を作成できます。次に、最新の情報を得るために各関数にupdateQuantityを呼び出すことができます。私たちは機能をリーンに保ち、単一責任の原則に従わなければならないことを覚えておいてください。だからあなたのコードは、この(私は明瞭のためにconsole.logdocument.writeを交換してきましたし、そのさらに下に改善する方法を説明します)のようになります。

var price = 5; 
var quantity = 0; 
var lDiscountRate = 0.05; 
var hDiscountRate = 0.1; 
var total = 0; 

function updateQuantity(){ 
    var oldTotal = price * quantity; 
    var discountTotal = total * lDiscountRate; 

    if (oldTotal >= 10) { 
     console.log("you have a discount total was " + oldTotal + " total after discount " + total); 
    } else if (oldTotal >= 15) { 
     total = oldTotal * hDiscountRate; 
     console.log("you have a discount total was " + oldTotal + " total after discount " + total); 
    } else { 
     total = oldTotal; 
     console.log("you don't have a discount the total is " + total + "$"); 
    } 
} 

function addItem() { 
    quantity++; 
    updateQuantity(); 
} 

function removeItem() { 
    quantity--; 
    updateQuantity(); 
} 

ここでは、重要な物事のカップルを行っています。最初に、処理ロジックを独自のupdateQuantity関数に移しました。これは、アイテムを追加または削除するたびに実行されます。これにより、説明したようにデータが「リフレッシュ」し続けることが保証されます。別の重要なビットは、関数内でoldTotalを移動して、各呼び出しで更新されるようにしていました。あなたが宣言しておらず、あなたのコードで使っていないdiscountTotalも宣言します。

これで、ハンドラー関数addItemremoveItemをDOM(ボタン)に結び付けるだけで済みます。関数への参照は、onclickハンドラに渡すことも、イベントリスナを使うこともできます。これは、より良い方法です。イベントリスナーは指定されたイベント(この場合は)をリッスンし、それが発生したときに関数を実行します。idを各ボタンに追加してコード内で探します。document.querySelector()を使用しますすべてのhtml要素でリスナーを追加する必要があるaddEventListenerメソッドを使用してください。

最後に、メッセージを印刷する空の番号を<div>に追加します。 document.writeを使用し、代わりにdocument.querySelector()を使用して結果を表示する要素を見つけて、innerHTMLプロパティに文字列を追加します。

var messageDiv = document.querySelector('#results'); 

var price = 5; 
var quantity = 0; 
var lDiscountRate = 0.05; 
var hDiscountRate = 0.1; 
var total = 0; 

function updateQuantity(){ 
    var oldTotal = price * quantity; 

    if (oldTotal >= 10) { 
     var discountTotal = total * lDiscountRate; 

     messageDiv.innerHTML = "you have a discount total was " + oldTotal + " total after discount " + total; 
    } else if (oldTotal >= 15) { 
     total = oldTotal * hDiscountRate; 
     messageDiv.innerHTML = "you have a discount total was " + oldTotal + " total after discount " + total; 
    } else { 
     total = oldTotal; 
     messageDiv.innerHTML = "you don't have a discount the total is " + total + "$"; 
    } 
} 

function addItem() { 
    quantity++; 
    updateQuantity(); 
} 

function removeItem() { 
    quantity--; 
    updateQuantity(); 
} 

var addButton = document.querySelector('#addButton'); 
var removeButton = document.querySelector('#removeButton'); 

addButton.addEventListener('click', function() { 
    addItem(); 
}); 

removeButton.addEventListener('click', function() { 
    removeItem(); 
}); 

最後に、我々は、我々の結果を印刷するには、各ボタンのiddivを含めるようにHTMLのビットを更新します。我々はもはやonclick属性を使用する必要がないことに注意してください。

<!DOCTYPE html> 
<!-- 
To change this license header, choose License Headers in Project Properties. 
To change this template file, choose Tools | Templates 
and open the template in the editor. 
--> 
<html> 
    <head> 
     <title>Shopping</title> 
     <script type="text/javascript" src="JavaScript.js"></script> 
    </head> 
    <body> 
     <div id="results"></div> 
     <button type="button" id="addButton">Add one item</button> 
     <button type="button" id="removeButton">Remove one item</button> 
    </body> 
</html> 

ここではあなたのための作業例です:http://jsbin.com/rejutudese/edit?html,js,output

0

あなたは既に外部のJavaScriptファイルに「数量」変数を宣言しているので、あなたは再びそれを宣言する必要はありません。他の人が述べたように、JavaScriptファイルに関数を作成し、それをパラメータで呼び出す。すでに

(外部JSファイル)

var price = 5; 
var quantity = 0; 
var ldiscountrate = 0.05; 
var hdiscountrate = 0.1; 
var total = 0; 
var oldtotal = 0; 

function recalculate(diff) 
{ 
    var resultElem = null; 

    try 
    { 
     if(quantity==0 && diff<=0) 
     { 
      //Ignore 
      return; 
     } 
     else 
     { 

      resultElem = document.getElementById("theResult"); 

      quantity+=diff; 
      oldtotal = price * quantity; 

      if (oldtotal >= 10) 
      { 
        discounttotal = total * ldiscountrate; 
       resultElem.innerHTML="you have a discount total was " + oldtotal + " total after discount " + total; 
      } 
      else if (oldtotal >= 15) 
      { 
        total = oldtotal * hdiscountrate; 
       resultElem.innerHTML="you have a discount total was " + oldtotal + " total after discount " + total; 
      } 
      else 
      { 
       total = oldtotal; 
       resultElem.innerHTML="you don't have a discount the total is " + total + "$"; 
      } 
     } 
    } 
    catch(e) 
    { 
     alert("recalculate Error: " + e.Message); 
    } 
    finally 
    { 

    } 

    return; 
} 

(HTMLファイル)

<html> 
<head> 
<title>Sample Answer</title> 
<script type="text/javascript" language="javascript" src="JavaScript.js"></script> 
</head> 
<body> 
    <button type="button" onclick="recalculate(1)" >Add one item</button> 
    <button type="button" onclick="recalculate(-1)" >Remove one item</button> 
    <hr/> 
    <div id="theResult"></div> 
</body> 
</html>