0

ユーザーが 2 つの範囲の間で値を選択できるようにする多数のスライダーがあるページがあります。スライダーが動くたびに数値が更新され、新しい図が表示されます。

これを拡張するために、ユーザーが合計から差し引かれる数値を入力できるフリー テキスト フィールドを追加したいと考えています。

次のコードがありますが、変数を既存の JavaScript に渡す方法がわかりません。expensemount を使用するだけでは何も表示されません。

<script type="text/javascript">
$(document).ready(function() {
$("#expense").change(function(){
var expenseamount = $(this).val(); 
});
});
</script>

これまでご協力いただきありがとうございましたが、まだ何も起こっていません - 私の完全なスクリプトは以下の通りです:

<script> 
$( ".slider" ).slider({
range: "min",
value: 50,
min:10,
max: 100,
step: 10,
slide: function( event, ui ) {
$( "#slider-result" ).html( ui.value );
},
});

var amount= $( ".slider" ).slider( "value" );

var expenseamount;
$(document).ready(function() {
$("#expense").change(function(){
expenseamount = $(this).val(); 
});
});

amount2 = amount - expenseamount;
$("#total" ).text(amount2);

</script> 
4

3 に答える 3

1

最も簡単な答えは、expenseamount使用する前にグローバル変数として宣言することです。その後、プロジェクト内のすべてのスクリプトで使用できるようになります。ハンドラー内で宣言.ready()すると、そのハンドラー関数内でローカル変数になるため、プロジェクトの他の場所では使用できません。これをグローバル変数として宣言する方法は次のとおりです。

script type="text/javascript">

var expenseamount;

$(document).ready(function() {
    $("#expense").change(function(){
        expenseamount = $(this).val(); 
    });
});
</script>

グローバル変数は相互に競合する可能性があるため、追加するグローバル変数をできるだけ少なくすることをお勧めします。このようなグローバルを 1 つだけ使用する場合、または非常に単純なアプリの場合は、上記の手法で問題ありません。

一方、アプリが非常に大きく、おそらく他の人がコードを提供している大規模なプロジェクトの一部である場合は、グローバル変数の競合を回避するための対策を講じる必要があります。その場合、最上位のグローバル変数を 1 つ作成し、次のような項目をプロパティとして追加します。

script type="text/javascript">

// make sure myAppGlobals is defined as an object
// but if it has already been defined, don't overwrite it
var myAppGlobals = myAppGlobals || {};

$(document).ready(function() {
    $("#expense").change(function(){
        myAppGlobals.expenseamount = $(this).val(); 
    });
});
</script>
于 2012-09-17T17:41:47.097 に答える
0

Javascript には関数スコープがあります。つまり、関数で定義された変数は、それらの関数では使用できません。したがって、代わりに、変数が存在することを意図しているスコープ、つまりグローバルスコープで変数を宣言します。

var expenseamount;

$(document).ready(function() {
  $("#expense").change(function(){
    expenseamount = $(this).val(); 
  });
});

// expenseamount can now be used from anywhere
于 2012-09-17T17:41:44.980 に答える
0

を取り出すvarexpenseamount、グローバル変数になります。しかし、適切なコーディングの実践に関しては、それは恐ろしいことです。

このような共通データを保持し、それをグローバルにするために、ある種のオブジェクトを作成することをお勧めします。おそらくいくつかの単純な名前空間も追加したいでしょう:

var AppData = AppData || {};

AppData.expenseAmount = 0;

//...

$(doument).ready(function () {
    $("#expense").change(function(){
        AppData.expenseAmount = $(this).val(); 
    });
});

//...

function someOtherFunction() {
    alert(AppData.expenseAmount); //you get the point.
}

PS - これは「どこでも動作するはず」の修正です。特定の状況と JavaScript の機能 (クロージャなど) を考慮して、expenseAmount必要な場所だけに利用できるように制限する必要があります。したがって、明確にするために、これは最善の解決策ではありません。コード構造について詳しく知らなくても、私が提供できる最善の解決策です。あなたはそれを改善するよう努めるべきです。

于 2012-09-17T17:40:27.797 に答える