代码之家  ›  专栏  ›  技术社区  ›  Mauro74

如何获取关联数组中的键和值

  •  2
  • Mauro74  · 技术社区  · 15 年前

    现在事情变得复杂了。具有可用日期的数组需要是一个id和date分别为“key”和“value”的关联数组。如何检索与我单击的可用日期关联的id?

    这是我目前的代码:

    function calendar(){
    
        function datePicker(array){
            $j("#datepicker").datepicker({
                dateFormat: 'dd-mm-yy',
                minDate: $j.datepicker.parseDate('ddmmyy', array[0]), //this makes the datepicker start at the first available
                beforeShowDay: function(dateToShow){
                    if ($j.inArray($j.datepicker.formatDate('ddmmyy', dateToShow),array) !== -1) return [1, 'my-class', 'Available date!'];
                    else return [0, 'no-class', 'Date not available!'];
    
                },
                //get the selected date
                onSelect: function(dateText) {
                    var dateAsString = dateText; //the first parameter of this function
    
                    //var dateAsObject = $j(this).datepicker( 'getDate' ); //the getDate method
                    $j('#getDate').text(dateAsString);
                }
            });
        }
    
    
        $j('.book-pack a.button').each(function(){
    
            //getting the button id
            var btnId = $j(this).attr('id');
    
            //arrays with available dates for the 3 packs
            var datesClub = new Array('08102010', '09102010', '15102010', '16102010', '22102010', '23102010', '29102010', '30102010');
            var datesEssential = new Array('08102010', '09102010', '15102010', '16102010', '22102010', '23102010', '29102010', '30102010');
            var datesFling = new Array('08102010', '09102010', '15102010', '16102010', '22102010', '23102010', '29102010', '30102010');
    
    
            $j(this).click(function(){
    
                switch(btnId)
                {
                    case 'club-class':
                        $j('.window h2.page-title').text('Club Class');
                        datePicker(datesClub);
                        break;
                    case 'essential':
                        $j('.window h2.page-title').text('The Essential Experience');
                        datePicker(datesEssential);
                        break;
                    case 'last-fling':
                        $j('.window h2.page-title').text('Last Fling Before the Ring');
                        datePicker(datesFling);
                        break;
                }
    
                return false;
            });
        });
    }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   Mottie    15 年前

    试试这样的( demo ):

    此脚本从关联数组(对象)创建日期数组。切换key:value对更容易,这样日期就是键,值就是id,但我想这会让我明白这一点。

    function calendar() {
    
        function datePicker(pack) {
            // create array of dates from pack
            var i, array = [];
            for (var i in pack) {
                array.push(i);
            }
            $j("#datepicker").datepicker({
                dateFormat: 'dd-mm-yy',
                minDate: $j.datepicker.parseDate('ddmmyy', array[0]),
                //this makes the datepicker start at the first available
                beforeShowDay: function(dateToShow) {
                    return ($j.inArray($j.datepicker.formatDate('ddmmyy', dateToShow), array) !== -1) ? [1, 'my-class', 'Available date!'] : [0, 'no-class', 'Date not available!'];
                },
                //get the selected date
                onSelect: function(dateText, inst) {
                    var dateAsString = dateText,
                        //the first parameter of this function
                        dateCompressed = (dateText).replace(/-/g, ''); // dd-mm-yyyy -> ddmmyyyy
                    $j('#getDate').text(dateAsString);
                    $j('#getId').text(pack[dateCompressed]);
                }
    
            });
        }
    
    
        $j('.book-pack a.button').each(function() {
            //getting the button id
            var btnId = $j(this).attr('id');
            //arrays with available dates for the 3 packs
            var datesClub = { '08102010' : 'id1', '09102010' : 'id2', '15102010' : 'id3', '16102010' : 'id4', '22102010' : 'id5', '23102010' : 'id6', '29102010' : 'id7', '30102010' : 'id8' };
            var datesEssential =  { '08102010' : 'id1', '09102010' : 'id2', '15102010' : 'id3', '16102010' : 'id4', '22102010' : 'id5', '23102010' : 'id6', '29102010' : 'id7', '30102010' : 'id8' };
            var datesFling =  { '08102010' : 'id1', '09102010' : 'id2', '15102010' : 'id3', '16102010' : 'id4', '22102010' : 'id5', '23102010' : 'id6', '29102010' : 'id7', '30102010' : 'id8' };
    
            $j(this).click(function() {
                switch (btnId) {
                case 'club-class':
                    $j('.window h2.page-title').text('Club Class');
                    datePicker(datesClub);
                    break;
                case 'essential':
                    $j('.window h2.page-title').text('The Essential Experience');
                    datePicker(datesEssential);
                    break;
                case 'last-fling':
                    $j('.window h2.page-title').text('Last Fling Before the Ring');
                    datePicker(datesFling);
                    break;
                }
                return false;
            });
        });
    }