Laravel Dropdown具有无限子类别级别的嵌套类别给出错误

时间:2018-10-07 18:32:09

标签: javascript php mysql arrays laravel

我正在为Laravel 5中的n级记录创建下拉列表加载。目前,我正在使用此代码,但我在子类别中收到错误。

老实说,我不知道如何从儿童类别中获得价值,我相信这是问题的主要根源。但是我不知道怎么解决

控制台日志显示

  

TypeError:孩子不是函数[了解更多]

这是我的数据库和代码:

数据库:结构

enter image description here

实体功能:

public function getAjaxGetCategoriesDropdown() {
    $categories = DB::table('categories')
        ->where('is_active', 1)
        ->orderBy('path', 'asc')
        ->select('categoryName','level','id','parentId')
        ->get();

    $first = array();
    $children = array();
    foreach ($categories as $cats) {
        if ($cats->level == 2) {
            $first[$cats->id] = $cats;
        } else if ($cats->parentId) {
            $children[$cats->parentId][] = $cats;
        }
    }
    return array('first' => $first, 'children' => $children);
}

脚本:

<script type="text/javascript">
  var children = @json($cats['children'])

  function showCat(obj, level) {
      var catId = obj.value;
        level += 1;
          if ($('cat_container_' + level)) {
             $('cat_container_' + level).remove();}
             var options = children(catId);
             var html = '<select id="cat_' + catId + '" onchange="showCat(this, ' + level + ')">' + '<option value="">Select a SubCategory</option>';
         for (var i = 0; i < options.length; i++) {
            html += '<option value="' + options[i].id + '">' + options[i].categoryName + '</option>';}
            html += '</select>' + '<i class="arrow double"></i>';
            html = '<label class="field select ' + 'cat_container_' + level + '">' + html + '</label>';
$('sub_cat').insert(html);

}

VIEW BLADE:

<select id="first_cat" class="required-entry validate-select" onchange="showCat(this, 2)">
        <option value=""> Select a Category </option>
        @foreach($cats['first'] as $cat): <option value="{{ $cat->id }}">{{ $cat->categoryName }}</option> @endforeach
</select>
<div id="sub_cat"></div>

任何帮助表示赞赏!。

1 个答案:

答案 0 :(得分:1)

更改

var options = children(catId);

收件人

var options = children[catId];