2016-10-14 1 views
1

У меня есть вид с картой gmaps.js, отображающей маркеры из базы данных. Я добавил фильтр производителями. HTML:Как отправить unknow количество переменных в контроллер в CodeIgniter?

<select id="filtrs-1"> 
        <option value="all">All</option> 
        <option value="manufacturer1">Manufacturer1</option> 
        <option value="manufacturer2">Manufacturer2</option> 
        <option value="manufacturer3">Manufacturer3</option> 
        <option value="manufacturer4">Manufacturer4</option> 
     </select><br /> 
<button id="go-button" type="button">Click Me!</button> 

и JQuery:

var puzzles = <?= json_encode($puzzles);?>; 
    var allMap;  
    $(document).ready(function(){ 
       var allMap = new GMaps({ 
        el: '#map', 
        zoom: 7, 
        lat: 37.4419, 
        lng: -122.1419 
       }); 
       loadJsonMap(allMap, puzzles); 

       $('#go-button').click(function(){ 
        var filtrs1 = $('#filtrs-1').val(); 
        $.get('<?php echo base_url() ?>index.php/map/filter/' + filtrs1, function(response){ 
         allMap.removeMarkers(); 
         loadJsonMap(allMap, response); 
        }); 
       }); 
      }); 

где loadJsonMap загружает маркеры на карте. Поэтому, когда я нажимаю на кнопку I GER АЯКС вызов для метода фильтра:

public function filter($man) 
     { 
       if ($man == 'all'){ 
        $data = $this->puzzles_model->get_puzzleCoordinates(); 
       }else{ 
        $data = $this->puzzles_model->get_puzzlesByManufacturer($man); 
       }    
       header('Cache-Control: no-cache, must-revalidate'); 
       header('Content-Type: application/json'); 
       echo json_encode($data); 
     } 

и карту, если фильтруется производителя! Я новичок в jquery, поэтому я действительно гордился собой. Однако я застрял на следующем шаге. Пользователь должен иметь возможность фильтровать более чем одного производителя, поэтому я изменил HTML:

<button id="go-button" type="button">Click Me!</button> 

    <div class="multiselect"> 
     <label><input type="checkbox" value="all" />All</label> 
     <label><input type="checkbox" value="manufacturer1" />manufacturer1</label> 
     <label><input type="checkbox" value="manufacturer2" />manufacturer2</label> 
     <label><input type="checkbox" value="manufacturer3" />manufacturer3</label> 
     <label><input type="checkbox" value="manufacturer4" />manufacturer4</label> 
    </div> 

, но не может получить муравей дальше ...

  1. Как я должен собрать данные от флажка? Должен ли я иметь отдельный идентификатор для каждого значения?

  2. Как мне изменить свой фильтр, чтобы он мог получить массив значений (проблема в том, что я не знаю, сколько флажков будет проверяться)?

+0

Вы должны использовать массив в именах флажком. Пример: производитель [] –

ответ

1

Первое, что вы должны установить флажок в виде массива, как имя = "АБВ []". См. Ниже код, вы можете выбрать несколько флажков флажков select как массив и строку, разделенную запятой.

$(document).ready(function(){ 
 

 
    $("#go-button").on("click",function(){ 
 
    
 
    var chb = $("input[name='go[]']:checked"); 
 
    var multi_val = []; 
 
    $.each(chb,function(){ 
 
     multi_val.push($(this).val()); 
 
    }); 
 
    console.log(multi_val); 
 
    console.log(multi_val.join()); 
 
    
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="go-button" type="button">Click Me!</button> 
 

 
<div class="multiselect"> 
 
    <label> 
 
    <input type="checkbox" name="go[]" value="all" />All</label> 
 
    <label> 
 
    <input type="checkbox" name="go[]" value="manufacturer1" />manufacturer1</label> 
 
    <label> 
 
    <input type="checkbox" name="go[]" value="manufacturer2" />manufacturer2</label> 
 
    <label> 
 
    <input type="checkbox" name="go[]" value="manufacturer3" />manufacturer3</label> 
 
    <label> 
 
    <input type="checkbox" name="go[]" value="manufacturer4" />manufacturer4</label> 
 
</div>

0

Для извлечения значений из выпадающего меню вам необходимо использовать .val() в jQuery. Ниже приведен фрагмент кода, который извлекает значение и предупреждает об этом.

$('#go-button').click(function() { 
    var manufacturer = $('select#filtrs-1').val(); 
    alert(manufacturer); 
}); 

Я использую .click() событие на кнопку, чтобы начать искать значения в выпадающем списке. Мы можем просто ссылаться на ваш элемент select с select#filtrs-1, мы устанавливаем var с var manufacturer =, фактический .val() будет извлекать значение из вашего элемента. С помощью простого предупреждения мы можем проверить, действительно ли значение было извлечено после запуска кода.

JSfiddle ниже

https://jsfiddle.net/gv2rkyn3/2/

+0

Полностью не понял, что вы хотели, поэтому я переписал версию jQuery, надеюсь, это поможет! – Rimble

+0

Нет, у вас это получилось в первый раз! У меня нет проблем с select tag. Я могу получить значение filtrs-1 и вызвать другой метод, который обновляет карту. Я не понимаю, как получить несколько значений. Теперь пользователь может фильтровать карту только от одного производителя или видеть все, но я хочу реализовать возможность фильтрации производителя1 и производителя2. Если оба параметра отмечены, как мне получить оба значения и как передать оба значения методу? –