【问题标题】:Multiselect dropdown listbox code using cakephp使用 cakephp 的多选下拉列表框代码
【发布时间】:2016-12-06 07:03:52
【问题描述】:

我的表单中有两个依赖选择框用于选择国家和州。

当我选择国家印度时,它应该填充它的依赖状态。直到这个我的代码工作正常......

我想做这个多选列表框。

例如 - 如果我从县下拉列表中选择两个国家,那么它会填充来自两个国家的州......不是单个选定的国家。

下面是我的代码...

HTML 选择列表框代码

<?php
echo $this->Form->input('service_area_category_id', array(
    'id' => 'shipping_type',
    'required' => false,
    'multiple' => 'multiple',
    'type' => 'select',                                           
    'class' => 'form-control drop-arrow',
    'label' => false,
    'options' => $serviceCategory,
    'empty' => '--Select--'
));
?>

<?php
echo $this->Form->input('ship_category', array(
    'class' => 'form-control drop-arrow',
    'required' => false,
    'id' => 'state',
    'label' => false,
    'options' => '$states',
    'empty' => '--Select--'
));
?>  

控制器功能

public function getServiceArea(){     
    $this->loadModel('ServiceAreaCategory');        
    $serviceCategory = $this->ServiceAreaCategory->find('list', array(
        'conditions' => array(
            'is_active' => 1
        ),
        'fields' => array(
            'ServiceAreaCategory.id',
            'ServiceAreaCategory.name'
        ),
        'order' => 'name ASC'
    ));
    $this->set('serviceCategory', $serviceCategory);     
}


public function loadSkills() {
    $this->loadModel('Skill');
    $states = array();
    if (isset($this->request['data']['id'])) {
        $states = $this->Skill->find('list', array(
            'fields' => array(
                'Skill.id',
                'Skill.skill_name'
            ),
            'conditions' => array(
                'Skill.service_area_category_id' => $this->request['data']['id']
            )
        ));
    }            
    echo json_encode($states);
    exit();
}     

Ajax 脚本

<script type="text/javascript">
    $(document).ready(function() {
        $("#shipping_type").on('change', function() {
            var id = $(this).val();           
            if (id) {
                var dataString = 'id=' + id;
                $.ajax({
                    type: "POST",
                    url: '<?php echo Router::url(array("controller" => "Profiles", "action" => "loadSkills")); ?>',
                    data: dataString,
                    dataType: 'JSON',
                    cache: false,
                    beforeSend: function() {
                        $('.spinicon').show();
                    },
                    complete: function() {
                        $('.spinicon').hide();
                    },
                   success: function(html) {
                        $("#loding1").hide();
                        $.each(html, function(key, value) {
                            $('<option>').val('').text('select');
                            $('<option>').val(key).text(value).appendTo($("#state"));
                        });
                        $('#state').selectpicker('refresh');
                    }
                });
            }
        });

    });
</script>

【问题讨论】:

  • 发布代码时,请以正确可读的方式格式化 - 谢谢!

标签: javascript php ajax cakephp


【解决方案1】:

在你的 cakephp 侧函数中应该是

public function loadSkills() {

        $exploded_ids=explode(",",$this->request['data']['country_ids']);
        $ids= "IN ('".implode(",",$exploded_ids).")";
        $this->loadModel('Skill');
        $states = array();
        if (isset($this->request['data']['id'])) {
        $states = $this->Skill->find('list', array('fields' => array('Skill.id','Skill.skill_name'),'conditions' => array(
        'Skill.service_area_category_id '.$ids )));
        }            
        echo json_encode($states);
        exit();
}     

你的 Javascript 和 AJAX 代码应该是

<script type="text/javascript">
    $(document).ready(function() {
        $("#shipping_type").on('change', function() {
            var ids = $(this).val();           
            if (id) {

                $.ajax({
                    type: "POST",
                    url: '<?php echo Router::url(array("controller" => "Profiles", "action" => "loadSkills"),true); ?>',
                    data: {country_ids: ids}
                    dataType: 'JSON',
                    cache: false,
                    beforeSend: function() {
                        $('.spinicon').show();
                    },
                    complete: function() {
                        $('.spinicon').hide();
                    },
                   success: function(html) {
                        $("#loding1").hide();
                        $("#state").html("");
                        $.each(html, function(key, value) {
                            $('<option>').val('').text('select');
                            $('<option>').val(key).text(value).appendTo($("#state"));
                        });
                        $('#state').selectpicker('refresh');
                    }
                });
            }
        });

    });
</script>

【讨论】:

  • 我已经编辑了 url 以传递完整的 url 而不是相对的 usl。请检查
  • 请检查 pr($this->request['data']['country_ids']);死();变量 $this->request['data']['country_ids'] 应该是数组类型。
  • 我已将 esplode 逗号分隔字符串的代码编辑为数组。我假设 ajax 传递数组而不是逗号分隔的字符串。请立即检查。
  • 我已编辑,请检查...并在 loadSkills() 方法中尝试自己
  • 但是现在当我选择多个值时,它显示以下错误.. SQL 查询: SELECT Skill.id, Skill.skill_name FROM @987654327 @.skills AS Skill WHERE Skill.service_area_category_id IN ('1','3)

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
相关资源
最近更新 更多