2011-07-23 13 views
0

私はjQueryの初心者ですので、このような簡単な質問をしてくれてありがとうございます。 jQuery Spinライブラリを使用して、値が変更されたときに通知を受けたい。ここに私のコードです:JavaScript、JQuery問題:ページ読み込み時に関数が自動的にトリガされました!

<script> 
$(document).ready(function(){ 
    $.spin.imageBasePath = './theme/css/images/spin1/'; 
    $('#spin1').spin({ 
     min: 1, 
     max: 99, 
     lock: true, 
     beforeChange: calculate_price() 
    }); 
}); 

function calculate_price() { 
    $('#lblTotalPrice')[0].innerHTML = $('#spin1')[0].value; 
} 
</script> 

非常に簡単です。しかし、問題は "calculate_price"関数は毎回ロードされたページが読み込まれ、ユーザーがSpin Editの値を変更したときにトリガしませんでした。

誰かがなぜこれが起こっているのか考えていますか?

答えて

4

私はその特定のライブラリに慣れていないんだけど、あなたは他のすべての権利を持っている場合、あなたはこの変更する必要があります。これに

beforeChange: calculate_price() 

を:

beforeChange: calculate_price 

あなたはbeforeChangeを設定し、機能自体ではなく、calculate_price()を呼び出した結果を返すことができます。したがって、最初の割り当て時に一度呼び出され、スピン中には呼び出されませんでした。

beforeChangeコールバックのドキュメントを見ると、値が実際に変更される前に呼び出されます。そのコールバックは古い値と新しい値の2つのパラメータで呼び出されるので、それらをあなたのcalculate_price(newVal, oldVal)関数に追加して、スピンコントロールから値を取得するのではなく、それらを使用することができます。

1

spin()の方法オプションでcalculate_price()からcalculate_priceに変更する必要があります。問題は、calculate_price関数を実行した結果、beforeChangeフィールドに設定しようとしたことです。そのため、ロードされるたびに呼び出されます。関数をコールバックとして設定する必要がありますので、関数名の後ろに()を入れないでください。

関連する問題