Jquery, как получить массив из отмеченных флажков - PullRequest
1 голос
/ 05 января 2011

Мне нужно передать данные в виде массива в экземпляр fancybox в JQuery.

Переданный формат должен выглядеть следующим образом: Array( [remove] => Array ( [1] => 1 [109] => 109 [110] => 110 ))

Теперь я использую следующий код, но он не работает, потому что я не передаю массив.

Заранее спасибо ...

Флажки выглядят так и генерируются по результатам базы данных:

<td class="checkboxTable"><input name="remove[<?php echo $users->id; ?>]" type="checkbox" id="checkbox[]" value="<?php echo $users->id; ?>"/></td>

Я использую следующий JavaScript:

$('.deleteConfirmationMultiple').Loader({
    url: ['/dgpcms/public/fancybox/jquery.fancybox-1.3.2.pack.js',
        '/dgpcms/public/fancybox/jquery.easing-1.3.pack.js',
        '/dgpcms/public/fancybox/jquery.mousewheel-3.0.4.pack.js',
        '/dgpcms/public/fancybox/jquery.fancybox-1.3.2.css'],
    ////debug: [true],
    cache: [true],
    success: function(target){
        $(this).fancybox({
            'autoDimensions'    : true,
            'autoScale'         : true,
            'overlayOpacity'    : '0.70',
            'overlayColor'      : '#000000',
            'transitionIn'      : 'none',
            'transitionOut'     : 'none',
            'hideOnOverlayClick': false,
            'hideOnContentClick': false,
            'showCloseButton'   : false,
            'href'              : $('#deleteConfirmation').attr('action'),
            ajax : {
                    type    : 'POST',
                    data    : $('input:checkbox:checked')
                }
        });
    }
}); 

Есть ли способ передать значения в точности так, как это сделал бы PHP (например: Array ( [remove] => Array ( [1] => 1 [109] => 109 [110] => 110 ) [deleteMultiple] => Delete selected ))?

РЕДАКТИРОВАТЬ 12 января 2011

Я получил немного дальше, но нет странной проблемы ..

Идентификатор не публикуется в качестве данных в моем вызове ajax. Когда я создаю функцию onclick для ссылки checkall (все флажки выбираются) и вызываю функцию getData и оповещаю результат, я получаю идентификаторы отмеченных флажков. Но вызов функции в моем вызове ajax возвращает пустой ...

Вот код:

$('.deleteConfirmationMultiple').Loader({
    url: ['/dgpcms/public/fancybox/jquery.fancybox-1.3.2.pack.js',
        '/dgpcms/public/fancybox/jquery.easing-1.3.pack.js',
        '/dgpcms/public/fancybox/jquery.mousewheel-3.0.4.pack.js',
        '/dgpcms/public/fancybox/jquery.fancybox-1.3.2.css'],
    ////debug: [true],
    cache: [true],
    success: function(target){
        // Array( [remove] => Array ( [1] => 1 [109] => 109 [110] => 110 ))
        // var id = {5: '5', 6: '6', 7: '7'};

        var id = '';
        $.fn.getData = function(options){
            var id = $('input:checkbox:checked').map(function(){
                return this.value.serialize();
            }).get();
            //alert(id);
            return id;
        };

        $(this).fancybox({
            'autoDimensions'    : true,
            'autoScale'         : true,
            'overlayOpacity'    : '0.70',
            'overlayColor'      : '#000000',
            'transitionIn'      : 'none',
            'transitionOut'     : 'none',
            'hideOnOverlayClick': false,
            'hideOnContentClick': false,
            'showCloseButton'   : false,
            'href'              : $('#deleteConfirmation').attr('action'),
            ajax : {
                    type    : 'POST',
                    data    : {'remove':id}
                    }
        });         
    }
}); 

Редактировать 12 января 2010

Код ниже, содержащий жестко закодированный массив, работает точно так, как я хочу. Теперь мне нужно создать то же самое из отмеченных флажков ....

var id = {5: '5', 6: '6', 7: '7'};

        $(this).fancybox({
            'autoDimensions'    : true,
            'autoScale'         : true,
            'overlayOpacity'    : '0.70',
            'overlayColor'      : '#000000',
            'transitionIn'      : 'none',
            'transitionOut'     : 'none',
            'hideOnOverlayClick': false,
            'hideOnContentClick': false,
            'showCloseButton'   : false,
            'href'              : $('#deleteConfirmation').attr('action'),
            ajax : {
                    type    : 'POST',
                    data    : {'remove':id}
                    }
        });     

Ответы [ 3 ]

6 голосов
/ 05 января 2011

Я не уверен, что точный формат вы хотите передать, но получить массив вместо этого:

$('input:checkbox:checked')

... который получает набор элементов(объект jQuery), используйте .map(), чтобы получить массив их значений, например:

$('input:checkbox:checked').map(function() { return this.value; }).get();
2 голосов
/ 05 января 2011

Вы можете использовать .map() для этого:

var data = $('input:checkbox:checked').map(function(){
    return this.value;
}).get();

Это даст массив в формате ['109', '110'].

0 голосов
/ 12 января 2011

Повторно просматривая все и используя пример входа в систему fancybox, я придумал следующий код, который работает именно так, как я хотел:

$('.deleteConfirmationMultiple').Loader({
    url: ['/dgpcms/public/fancybox/jquery.fancybox-1.3.2.pack.js',
        '/dgpcms/public/fancybox/jquery.easing-1.3.pack.js',
        '/dgpcms/public/fancybox/jquery.mousewheel-3.0.4.pack.js',
        '/dgpcms/public/fancybox/jquery.fancybox-1.3.2.css'],
    //debug: [true],
    cache: [true],
    success: function(target){

        $(this).click(function()
        {
            var id = $('input:checkbox:checked').map(function(){
                return this.value;
            }).get();
            //alert(id);

            $.ajax({
                type    : "POST",
                url     : $('#deleteConfirmation').attr('action'),
                data    : {'remove':id},
                success: function(data) {
                    $.fancybox(data,
                    {
                        'autoDimensions'    : true,
                        'autoScale'         : true,
                        'overlayOpacity'    : '0.70',
                        'overlayColor'      : '#000000',
                        'transitionIn'      : 'none',
                        'transitionOut'     : 'none',
                        'hideOnOverlayClick': false,
                        'hideOnContentClick': false,
                        'showCloseButton'   : false
                    });
                }
            });
            return false;
        });
    }
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...