0

ユーザーが走行距離計(カウンター変数のスクリプトの下部)を設定するためにデータを入力したときに呼び出される関数があります。ユーザーがフィールドのいずれかを変更したい場合は、フォームに新しいデータを入力するだけで、走行距離計がリセットされ、再開されます。

私が抱えている問題は、以前の機能(jOdometer)が、以前のデータと新しい設定された走行距離計でま​​だ実行されていることです。前の関数の実行を停止して再開するにはどうすればよいですか?

私は次のことができることを望んでいました...

    $(function(){

        var counter;

        $('#submit').click(function(){

            if(counter != undefined){
                counter.stop();
            }

            // get values from user.
            var counter_start = 0;
            var counter_end = 0;
            var increment = 0;
            var delayTime = 0;
            var speed = 0;
            var extraDigits = [];

            if($('#counter_end').length > 0){
                 counter_end = $('#counter_end').val();
            }else{
                counter_end  = false;
            }
            if($('#counter_start').length > 0){
                counter_start = $('#counter_start').val();
                if(counter_end.length > counter_start.length){
                    for(i=counter_start.length+1; i<=counter_end.length; i++){
                        extraDigits = '0' + extraDigits;
                    }
                    if(extraDigits.length > 0){
                        counter_start = extraDigits + counter_start
                    }
                }
            }else{
                counter_start = 1;
            }
            if($('#increment').length > 0){
                increment = $('#increment').val(); 
            }else{
                increment = 1;
            }
            if($('#delay_time').length > 0){
                delayTime = $('#delay_time').val(); 
            }else{
                delayTime = 500;
            }
            if($($('#delay_time')).length > 0){
                delayTime = $('#delay_time').val();
            }else{
                delayTime = 1000;
            }

            counter = $('.counter4').jOdometer({
                counterStart: String(counter_start),
                counterEnd: String(counter_end),
                delayTime: parseInt(delayTime),
                increment: parseInt(increment),
                speed: parseInt(speed),
                    formatNumber: true,
                spaceNumbers: 0,
                widthDot: 10
            });
        })

    });

ただし、機能しません。私は何が間違っているのですか?

4

2 に答える 2

0

を使用 event.stopPropagation();して、イベントの実行を停止できます。

于 2012-08-13T11:59:21.907 に答える
0

jOdometerには.goToNumber()メソッドしかないようです-no.stop()またはdestroy()

実行可能な唯一のアプローチは、走行距離計を新しいDOM要素に置き換えてから初期化することだと思います。

これを試して:

$(function() {
    var c = $('#counter4').hide(),
        counter;
    $('#submit').click(function(){
        var counter_start = parseInt($('#counter_start').val()) || 1;
        var counter_end = parseInt($('#counter_end').val()) || 0;
        var counter_start_digits = counter_start.toString().length;
        var counter_end_digits = counter_end.toString().length;
        var padding = [];
        if(counter_end_digits > counter_start_digits) {
            for(var i=counter_start_digits+1; i<=counter_end_digits; i++) {
                padding.unshift('0');
            }
        }
        if(counter) {
            counter.remove();
        }
        counter = c.clone().insertAfter(c).show().jOdometer({
            counterStart: padding.join('') + counter_start,
            counterEnd: counter_end || false,
            delayTime: parseInt($('#delay_time').val()) || 1000,
            increment: parseInt($('#increment').val()) || 1,
            speed: 0,
            formatNumber: true,
            spaceNumbers: 0,
            widthDot: 10
        });
    });
});

テストされていません

于 2012-08-13T23:11:07.570 に答える