торт автозаполнения - передать параметр - PullRequest
0 голосов
/ 16 марта 2011

У меня сейчас есть этот код.Я пытаюсь сделать автозаполнение на основе значения в раскрывающемся списке.Проблема в том, что я не уверен, как я могу передать выбранное значение в раскрывающемся списке в запросе ajax ...

Используя простой ванильный скрипт

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

Понятно.Вы хотите, чтобы параметр searchBy был сериализован так, чтобы он был доступен в вашей функции автозаполнения. Если вы ознакомились с документацией, есть возможность добавить дополнительные параметры.

Существует функция-прототип для сериализации форм.Я использую его для своих обычных форм, но я никогда не использовал для автозаполнения.Попробуйте это.

<form id='autocomplete_form' name='autocomplete_form'>
  <?php echo $this->Form->input('searchby', array('type' => 'select', 'options' => $searchByList, 'label' => 'Search By:'));?>
  <?php echo $ajax->autoComplete('searchvalue', '/Controller/autoComplete/', array('minChars' => 2, 'parameters'=>"Form.serialize('autocomplete_form')")); ?>
  <input name="search" type="submit" value="Search"/>
</form>
0 голосов
/ 16 марта 2011

Если вы делаете страницу поиска, я рекомендую передавать параметры, используя GET вместо POST.Часто пользователи добавляют в закладки свои поиски, если это делается с помощью POST, тогда результаты не могут быть сохранены.

Вот (быстро взломанный) пример того, как выполнить автозаполнение.

Ваш поисковый запрос

<form method="get" action="/controller/search">
    <?php echo $this->Form->input('Search.searchby', array('type' => 'select', 'options' => $searchByList, 'label' => 'Search By:'));?>
    <?php echo $ajax->autoComplete('Search.searchvalue', '/controller/autoComplete/', array('minChars' => 2)); ?>
    <input name="search" type="submit" value="Search"/>
</form>

Для него требуется контроллер с именем 'controller', который использует две функции ('поиск' и 'автозаполнение')

function search() {

    // GET parameters for search
    $searchby  = (isset($this->params['url']['searchby'])) ? ( $this->params['url']['searchby']) : '';
    $searchvalue  = (isset($this->params['url']['searchvalue'])) ? ( $this->params['url']['searchvalue']) : '';


    // DO SEARCH HERE
    $conditions = array('searchby'=>$searchby, 'searchvalue' => $searchvalue);
    …etc…

}



function autocomplete() {
    if(!empty($this->data['Search']['searchvalue'])){
        $rs = $this->Search->findAll(array('searchvalue' => "LIKE {$this->data['Search']['searchvalue']}%" ));
        $this->set('searchvalues', $rs);
    } 
    $this->render('autocomplete', 'ajax');      
}

Часть автозаполнения ajax нуждается в представлениишаблон с именем 'autocomplete.ctp'

<!-- autocomplete.ctp -->
<ul>
<?php if(isset($searchvalues) && !empty($searchvalues)){ ?>
    <?php foreach($searchvalues as $t) { ?>
    <li><?php echo $t['Search']['searchvalue']; ?></li>
    <?php } ?>
<?php } ?>
</ul>

Это должно направить вас в правильном направлении.

(Если вы хотели получить значение тега select и передать его через ajax, вам следует взглянуть на функции ajax для сериализации формы. Возможно, вам придется вручную написать код javascript, как яне знаю, есть ли у помощника ajax опции для сериализации формы. вот код, который я использовал для сериализации просто тег выбора. может быть полезным)

<?php
    $graph_type = array( 
        'impressions'=>'Impressions', 
        'click_throughs'=>'Click Throughs',
        'click_through_ratio'=>'Click Through Ratio',
        'time_with_brand'=>'Time with Brand', 
        'average_time_with_brand'=>'Average Time with Brand'
    );

    echo $html->selectTag('Graph/type', $graph_type, null, array('onChange' => 'event.returnValue = false; return false;', 'style' => 'margin-right:20px;'),null, false);
    echo $javascript->event("'GraphType'", "change", 
        $ajax->remoteFunction(
            array(
                'update' => 'graph_container',
                'url' => '/reports/ajax_graph_multiple',
                'with'=>"Form.serialize('reports_form')"
            )
        )
    );
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...