2017-08-15 16 views
-1

6ページからのユーザー入力を受け取り、PHP $ _SESSION変数に格納する投資計算機を作成しています。Javascript/Jquery関数でPHP変数を使用する

var cash = parseInt(JSON.parse('<?php echo json_encode($cash_flow); ?>')); 

私はそのようにようにスコアを見つけるために、数式による変数を実行します:

function SCORE(cash, comp, num_months) { 
var total1 = (cash - comp)/(num_months*12); 
var total2 = total1/2.5; 
var total3 = total2*100; 

var dvTotal = total3; 

return dvTotal; 

} 
最後のページで、私は$ _SESSION変数はPHPを形成し、そのようにJavaScriptにそれらをJSON.parse取ります

それから、JQueryを使ってスコアをDOMに出力します。

私は、それぞれのユーザーのオリジナル入力に+と - を付けて、ユーザーが元の入力を更新できるように表示するセクションを持っています。ここで

$('#cashMinusBtn').click(function(){ 
$('#cashFlowOutput').html(cash-=1000); 
var newCash = $('#cashFlowOutput').html(); 
SCORE(newCash); 
$('#dvTestOut').html(scoreTotal); 

HTMLを出力するためのユーザーデータに使用されます。

div class="container-fluid pro-table"> 
    <div class="row"> 
    <div class="col-md-12 tooltip-row"> 
     <h4>Increase or Decrease value of initial entry to see how your dv<strong>SCORE</strong> would be effected:</h4> 
    </div> 
    </div> 

    <div class="row tooltip-display"> 
    <div class="col-md-2 outputBox"> 
     <p>Cash Flow</p><br> 
     <p id="cashFlowOutput"></p><br> 
     <button class="table-button" id="cashMinusBtn">-</button><button class="table-button" id="cashPlusBtn">+</button> 


    </div> 
    <div class="col-md-2 outputBox"> 

     <p>Purchase Price</p><br> 
     <p id="purchaseOutput"></p><br> 
     <button class="table-button" id="purchaseMinusBtn">-</button><button class="table-button" id="purchasePlusBtn">+</button> 


    </div> 
    <div class="col-md-2 outputBox"> 

     <p>Down Payment</p><br> 
     <p id="downOutput"></p><br> 
     <button class="table-button" id="downMinusBtn">-</button><button class="table-button" id="downPlusBtn">+</button> 


    </div> 
    <div class="col-md-2 outputBox"> 

     <p>Interest Rate</p><br> 
     <p id="interestOutput"></p><br> 
     <button class="table-button" id="interestMinusBtn">-</button><button class="table-button" id="interestPlusBtn">+</button> 


    </div> 
    <div class="col-md-2 outputBox"> 


     <p>Months Financed</p><br> 
     <p id="monthsOutput"></p><br> 
     <button class="table-button" id="monthsMinusBtn">-</button><button class="table-button" id="monthsPlusBtn">+</button> 


    </div> 
    <div class="col-md-2 outputBox"> 

     <p>Compensation</p><br> 
     <p id="compOutput"></p><br> 
     <button class="table-button" id="compMinusBtn">-</button><button class="table-button" id="compPlusBtn">+</button> 


    </div> 

を私は+を介してユーザによって更新され、新しいデータをつかむしたいかでしょう - 、式を通してそれを送信、および更新スコアが表示されます。

は私がvar newCash = $('#cashFlowOutput').html();

で更新されたデータをつかんで何の問題もない。しかし、私は式を通じてバックnewCashを押し、スコアを更新し、トラブルを抱えています。

私は私が仕事の一部は、脆弱性を持っていますが、それはローカルサーバ上で進行中で、まだ仕事であることを理解し、この材料のためのレポが含まれます:https://github.com/DLzer/YarmouthApp/blob/master/finalPage.php

これは、アプリケーションでの私の最初の深刻な試みでありますだから、私は自分のためにもっと多くの仕事をする必要があるかどうか分からない。どんな批評も感謝しています。

+0

質問はうまく整理されていますが、タイトルはPHP変数にJs変数を渡す必要がありますか?これはあなたの問題ですか? –

+1

あなたの関数が3つの引数を期待しているように見えます。 'SCORE(newCash);でコールしています –

+0

あなたのコンソールを開いてエラーがあるかどうか確認しましたか? –

答えて

2

ここで間違っている可能性のあることがいくつかあります。

オフ以降、このラインは不必要に複雑である:ここ

var cash = parseFloat(JSON.parse('<?php echo json_encode($cash_flow); ?>')); 

私の仮定は、あなたがそれでのparseIntをやっているので、$cash_flowは、数あるということです。だから、あなただけのこれを行うことができます(ローレンスあたりとしてparseFloatはを使用するように更新):

var cash = parseFloat('<?php echo $cash_flow; ?>'); 

次は、DOM要素を使用する必要はありませんあなたは値

$('#cashFlowOutput').html(cash-=1000); 
var newCash = $('#cashFlowOutput').html(); 

を変更しているところを見てみましょう

var newCash = cash - 1000; 

が続いて最後の2行:

あなたがちょうど右の背中値を引っ張っているので、このために、あなたの代わりにこれを行うことができます
SCORE(newCash); 
$('#dvTestOut').html(scoreTotal); 

あなたSCORE機能を使用すると、compnum_monthsを逃している、3つのパラメータになります。また、scoreTotalは存在しません。jQueryの中にあなたのコードを以下に示し

var comp = 10; // sample value 
var num_months = 4; // sample value 
var scoreTotal = SCORE(newCash, comp, num_months); 
$('#dvTestOut').html(scoreTotal); 
+0

あなたの答えは完璧でした。しかし、あなたはここで細かいことを忘れました。彼は入力を取ろうとしていると言いました。そしてそれは計算機であり、彼の変数は現金を参照していることを明示しているので、parseFloat()はparseInt()よりうまく動作します。 –

+0

ああ、それは良い点です、私はそれを更新します:) ありがとう! –

+0

Dr_Derpのヘルプをよろしくお願いします。値の変更中に、ユーザーが+または - のようにそれを更新すると、DOMに変更が表示されます。http://imgur.com/a/9OL7U。関数の部分については、画像を参照して、私は+または - 任意の入力をクリックしてSCORE()関数を介して実行することができるようにしたいと思います。しかし、彼らがSCORE(現金)を更新するがSCORE(num_months)を更新しなければ、それはまだ処理したい。それが意味をなさないかどうかはわかりません。 – DLzer

1

いくつかの不具合があります。私は、これはあなたが、それは次のようになりたい、その場合にはSCORE機能から結果があることを意味していると仮定します。など、

$('#cashMinusBtn').click(function(){ 
$('#cashFlowOutput').html(cash-=1000); 
SCORE(newCash); 
$('#dvTestOut').html(scoreTotal); 

を、関数の引数が欠落機能、割り当てられていない変数の呼び出しのためのブラケットを閉じるように、それはこのようなことができます。あなたが他の2つの引数を渡したくない場合は、それが

SCORE(newCash); 

あなたはこの

function SCORE(cash, comp = 1, num_months = 1) { 
    var total1 = (cash - comp)/(num_months*12); 
    var total2 = total1/2.5; 
    var total3 = total2*100; 
    var dvTotal = total3; 
    return dvTotal; 
} 
としてしなければならないあなたのコードで呼ばれていたよう

$('#cashMinusBtn').click(function(){ 
    num_months = 1; // temporary values 
    comp = 1; // temporary values 
    $('#dvTestOut').html(SCORE(parseFloat(<?php echo $cash_flow ?>) - 1000, comp, num_months)); 
}); 

関数SCOREも変更することができます

引数のデフォルト値は1ですが、実行ごとに値を変更する場合は、

を使用する必要があります210​​

しかし、ユーザーがNUM_MONTHS = 0に合格した場合、例外が、ここにありますが、あなたはゼロ誤差で部門を取得します。したがって、常にの分母が0に等しくないことを確認する必要があります。端数の分母がゼロの場合、全体的な値が未定義であるため、式は正当な端数ではありません。

+0

完全なコードの詳細については、github repoを追加しました。私は実際には、現在の関数の外で定義された2つの他の引数を持っています。私はそれがほとんど '$( '#のcashMinusBtn')での作業を取得することができました(関数(){ $( '#のcashFlowOutput')をクリックし、HTML(cash- = 1000);。。 $( '#のdvScore')。 HTML(Math.ceil(dvSCORE($( '#cashFlowOutput')HTML()、COMP、monthly_payment)));} ) '私はそれが非常にうまく構造化機能はありません知っているが、それが働いています。 – DLzer

関連する問題