0

私の質問を適切に定義する方法について、私はかなり途方に暮れています。

各 .slider に関数があり、各スライダーに「実際の値」を持つ変数もあります。実際の値の数はスライダーごとに異なるため、配列内の値を数えて max: _をその数に設定することで、代替の数を調べると思いました。jQuery UI スライダーの使用。

私のコード:

   var costValues = [0, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 50000];
        var timeValues = ['Upp till 10 min', 'Upp till: 30 minuter', 'Upp till: 1h', 'Upp till tre timmar', 'Upp till en halvdag', 'Upp till en heldag', 'Upp till 2-3 dagar', 'Upp till en vecka', 'Upp till en månad', 'Upp till ett halvår', 'Upp till Ett år', 'Över ett år'];
        $( ".slider" ).each(function(i, e) {

..more Code

「dennaArray」の内容は関連する配列の名前と同じですが、「dennaArray」を「char コンテンツ」を持つ変数自体として解釈するため、それらの配列の .length を調べることができません。

4

1 に答える 1

1

アリソ、

あなたの質問の最初のバージョンから....

まず、プレーンな JavaScript オブジェクトの配列プロパティを作成します。

var lookupArrays = {
    'cost': [0, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 50000],
    'time': ['Upp till 10 min', 'Upp till: 30 minuter', 'Upp till: 1h', 'Upp till tre timmar', 'Upp till en halvdag', 'Upp till en heldag', 'Upp till 2-3 dagar', 'Upp till en vecka', 'Upp till en månad', 'Upp till ett halvår', 'Upp till Ett år', 'Över ett år']
};

次に、.each()関数内で、次の 2 つの配列のいずれかを選択できますlookupArrays

var dennaArray = lookupArrays[$(e).parent().attr('id')];

よくわかりませんが、slide:関数は次のように単純化される場合があります。

slide: function( event, ui ) {
    $(e).parent().find('.slider-result').html( dennaArray[ui.value] );
},

で変数をローカライズすることを忘れないでくださいvar。コードには、ローカライズする必要があるがローカライズされていないものがいくつかあります。

編集

いくつかの圧縮と効率の節約を伴うコードは次のとおりです。

$(function() {
    var $$ = {//cache of static jquery objects
        content: $('#content').hide(),
        rightColumn: $('#rightColumn').hide(),
        aktiviter: $('div.aktivitet'),
        tagSwitches: $('li.tag'),
        skickaFeedback: $('#skickaFeedback'),
        sliders: $('.slider'),
        describers: $('.describers'),
        header: $('#header'),
        h3: $('h3')
    };
    var lookupArrays = {
        'cost': [0, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 50000],
        'time': ['Upp till 10 minuter', 'Upp till: 30 minuter', 'Upp till: 1h', 'Upp till tre timmar', 'Upp till en halvdag', 'Upp till en heldag', 'Upp till 2-3 dagar', 'Upp till en vecka', 'Upp till en månad', 'Upp till ett halvår', 'Upp till Ett år', 'Över ett år'],
        'timeSimplified': ['tid-1', 'tid-2', 'tid-3', 'tid-4', 'tid-5', 'tid-6', 'tid-7', 'tid-8', 'tid-9', 'tid-10', 'tid-11', 'tid-12']
    };
    var dolj, visaContent;
    $$.sliders.each(function(i, e) {
        var $e = $(e),
            $parent = $e.parent();
        var dennaArray = lookupArrays[$parent.attr('id')];
        $e.slider({
            animate: true,
            range: "min",
            value: 0,
            min: 0,
            max: dennaArray.length-1,
            step: 1,
            start: function( event, ui ) {
                clearTimeout(dolj);
                clearTimeout(visaContent);
            },
            slide: function( event, ui ) {
                clearTimeout(dolj);
                clearTimeout(visaContent);
                switch($parent.attr('id')) {
                    case 'cost':
                        var txt = (ui.value == 0) ? 'Det måste vara gratis.' : 'Upp till: ' + dennaArray[ui.value] + ':-';
                    break;
                    case 'time':
                    default:
                        var txt = dennaArray[ui.value];
                }
                $parent.find('.slider-result').html( txt );
            },
            stop: function(event, ui) {
                dolj = setTimeout(function () {
                    $$.sliders.add($$.describers).add($$.header.find('h2')).slideUp();
                    $$.h3.css('cursor', 'pointer');
                    $parent.next().children().andSelf().slideDown();
                    $$.header.find('h1').animate({
                        'font-size': '1.4em',
                    }, 1000, function() {
                    });
                }, 3500);
                visaContent = setTimeout(function() {
                    $$.content.add($$.rightColumn).slideDown();
                }, 400);
            }
        });
    });
    //Om du klickar på ngn av frågorna så visas slidern igen så att du kan ändra dina parametrar :D
    $('.question').click(function(){
        $(this).show().parent().children().toggle();
    });
    $$.rightColumn.on('click', 'li.tag', function(){
        $$.aktiviter.hide();
        $tagSwitch = $(this).toggleClass('active');
        $$.tagSwitches.each(function() {
            if($(this).hasClass('active')) {
                var filterID = $(this).attr('id').replace("filterid-",'');
                $$.aktiviter.filter("." + filterID).show();
            }
        });
    });
    $('#skickaFeedback').click(function(){
        $.ajax({
            type: "POST",
            url: "saveFeedback.php",
            data: "someFeedback=" + $(this).prev().val(),
            cache: false,
            success: function(html){
                alert('Tack för din feedback!');
                $('#skickaFeedback').prev().val('');
            }
        });
    });
});
于 2012-10-25T01:03:47.223 に答える