Bootstrap двойной список, отправляющий все данные при нажатии на одну строку - PullRequest
0 голосов
/ 05 сентября 2018

Я использую Angular для получения данных для поля двойного списка начальной загрузки. Данные полностью отображаются в списке, но когда я щелкаю любую строку в списке, он просто выбрасывает все данные в другой список.

Как решить проблему, помогите!

       `<!-- Bootstrap -->

          <link href="{{ URL::asset('web/css/bootstrap-duallistbox.css') }}" 
        rel="stylesheet">
          <!-- Content Wrapper. Contains page content -->
  <div class="content-wrapper" class="content" ng-app="myApp" ng- 
  controller="testController">
    <!-- Content Header (Page header) -->
    <input type="hidden" name="base_url" id="base_url" value="<?php echo 
  env('APP_URL');?>">

   <section class="content-header">
      <h1>
        <strong>Edit Mocks</strong>
      </h1>
      <div class="breadcrumb" style="display:block">
     <button type="button" ng-click="sendQuestionList();" class="btn bg- 
     color" >  Update Mock Test</button>
      </div>
      <div class="row ">
                  <div class="col-sm-7">
                      <label for="desc" style="margin-top:2rem;" 
  class="control-label">Title</label>

                      <input type="text" name="desc" class="form-control" 
     id="title" placeholder="Enter Description" value="{{$mockData->title}}">

                  <div class="error-message">{{ $errors->first('desc') }} 
   </div>
                  </div>
                  </div>
    </section>     

    <!-- Main content -->
    <section class="content">

      <div class="row">
        <div class="col-sm-4 col-lg-3">
        <label>Select Category</label>
           <select name="category_id" id="category_id" ng-model="category_id" 
  ng-change="getSubcategories()" class="form-control"  style="width:90%"> 

        <option value="">Select Category</option>
              <option ng-repeat="option in categories" value="@{{option.id}}" 
    >@{{option.name}}</option>
           </select>
        </div>
        <div class="col-sm-4 col-lg-3">
           <label>Select SubCategory</label>
           <select name="subcategory_id" id="subcategory_id" ng- 
      model="subcategory_id"  ng-change="getTestList();"  class="form- 
       control" style="width:90%">

              <option value="">Select SubCategory</option>
              <option ng-repeat="option in subcategories" 
        value="@{{option.id}}">@{{option.name}}</option>
           </select>
        </div>
        <div class="col-sm-4 col-lg-3" style="padding-top:1.5%" ng- 
   hide="!selectedCount">
  <label>Selected Count :</label> <a href="#" data-toggle="modal" data- 
  target="#selectedQuestions">@{{selectedCount}}</a>
        </div>
      </div>
      <div class="row">
        <!-- left column -->
        <div class="col-md-12">
        <br>      
        <div class="panel">
           <form>
            <div class="form-group">

                     <select  multiple ng-model="data.value" 
             id="exampleInputEmail"  name="duallistbox_demo1[]">
                      <option ng-repeat="d in data">@{{d.question_title}} 
           </option>
                     </select>  
            </div>
            <button type="submit" class="btn btn-default">Submit</button>
            </form>

        </div><!--/.col (left) -->

   </div>

      </div>   <!-- /.row -->




  <!-- Modal -->
  <div id="selectedQuestions" class="modal fade" role="dialog" >
  <div class="modal-dialog" style=" 'position': 'fixed', 'top': '50%', 
  'margin-top': '-100px', 'left': '50%', 'margin-left': '-235px' ">

<!-- Modal content-->
<div class="modal-content">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">&times;</button>
    <h4 class="modal-title"><b>Questions</b></h4>
  </div>
  <div class="modal-body">
      <table class="table table-striped">
               <thead>
                <tr>
                 <th>id</th>
                 <th>Question Title</th>
                <th>Count</th>
                <th>Created At</th> 
                </tr>
               </thead>
               <tbody>  

                <tr ng-repeat="data in chckedIndexsData">
                  <td>@{{data.id}}</td>
                  <td>@{{data.question_title}}</td>
                  <td>@{{data.count}}</td>
                  <td>@{{data.created_at_formatted}}</td> 
                </tr>                    
               </tbody>
             </table>
              </div>
            </div>

          </div>
           </div>



   <!-- Modal -->
  <div id="addTest" class="modal fade" role="dialog" >
   <div class="modal-dialog">

    <!-- Modal content-->
  <div class="modal-content">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">&times;</button>
    <h4 class="modal-title"><b>Add Mock Test</b></h4>
    </div>
    <div class="modal-body">
      <div class="forn-group">
        <label>Enter Title</label>
        <input type="text" class="form-control" id="title" name="title">
      </div>
      </div>
     <div class="modal-footer">
    <button type="submit" class="btn bg-color" data-dismiss="modal" ng- 
     click="()">Submit</button>
       </div>
       </div>

        </div>
    </div>



     </section><!-- /.content -->









   </div><!-- /.content-wrapper -->

   <script type="text/javascript" 


  src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.9/angular.min.js"> 
   </script> 
    <!-- Include all compiled plugins (below), or include individual files as 
     needed -->

    <script src="{{ URL::asset('web/js/jquery.bootstrap-duallistbox.js') }}"> 
   </script>

       <script>

     **var demo1 = 
      $('select[name="duallistbox_demo1[]"]').bootstrapDualListbox();** 
                    </script>

      <script>
     var app = angular.module('myApp', [])
     app.controller('testController', function ($scope, $http, $location, 
      $window) { 


      var keys = [];
        var values = [];
        var APP_URL = document.getElementById('base_url').value;
        var 
     id=window.location.href.substr(window.location.href.lastIndexOf('/') + 
        1);

       var request = $http({
        method: "GET",
        url: APP_URL+'/edit-mocktest/'+id,
        data:  '',
        headers: { 'Accept':'application/json' }
       });

    /* Check whether the HTTP Request is successful or not. */
    request.success(function (data) { 
        $scope.data = data;
       console.log(JSON.stringify($scope.data));
        for(var i=0;i<=data.length;i++){  
          $scope.formatted_keys_value = data[i].formatted_keys;
          $scope.id = data[i].id;
          $scope.data1 = data[i];
          if($scope.formatted_keys_value == 1){
           keys.push($scope.id);
           values.push($scope.data1); 
        }
  $scope.chckedIndexs= keys;  
     $scope.chckedIndexsData = values; 
     $scope.selectedCount = $scope.chckedIndexsData.length;
        }
        $('#loading').css('display', 'none');  
        document.getElementById("res").value = JSON.stringify(data);
    })
    .error(function (data, status, headers, config) {  

         document.getElementById("res").value = JSON.stringify(data);
    });       



    /*==========FUNCTION FOR GET CATEGORIES------------------------*/
    var request = $http({
        method: "GET",
        url: APP_URL+'/api/categories',
        data:  '',
        headers: { 'Accept':'application/json' }
       });

    /* Check whether the HTTP Request is successful or not. */
    request.success(function (data) { 
        $scope.categories = data;
        $('#loading').css('display', 'none');  
        document.getElementById("res").value = JSON.stringify(data);
    })
    .error(function (data, status, headers, config) { 
         document.getElementById("res").value = JSON.stringify(data);
    });       



    /*==========FUNCTION FOR GET SUBCATEGORIES------------------------*/
    $scope.getSubcategories = function(){
        $scope.category_id = $('#category_id').val(); 

        var request = $http({
        method: "GET",
        url: APP_URL+'/api/subcategories?id='+$scope.category_id,
        data:  '',
        headers: { 'Accept':'application/json' }
       });

    /* Check whether the HTTP Request is successful or not. */
    request.success(function (data) { 
        $scope.subcategories = data;
        $('#loading').css('display', 'none');  
        document.getElementById("res").value = JSON.stringify(data);
    })
    .error(function (data, status, headers, config) {  
         document.getElementById("res").value = JSON.stringify(data);
    });       

    }



 /*==========FUNCTION FOR GET FILTERED LIST------------------------*/
    $scope.getTestList = function(){
        $scope.subcategory_id = $('#subcategory_id').val(); 

        var request = $http({
        method: "GET",
        url: APP_URL+'/api/mock_test_filter? 
            subcategory_id='+$scope.subcategory_id,
        data:  '',
        headers: { 'Accept':'application/json' }
       });

    /* Check whether the HTTP Request is successful or not. */
    request.success(function (data) { 
        $scope.data = data;
        console.log(JSON.stringify(data));
        $('#loading').css('display', 'none');  
        document.getElementById("res").value = JSON.stringify(data);
    })
    .error(function (data, status, headers, config) {  
         document.getElementById("res").value = JSON.stringify(data);
    });       

    }



    /*==========FUNCTION FOR GET SELECTED QUESTIONS------------------------*/

      $scope.checkedIndex = function (id,values) { 
      console.log(JSON.stringify($scope.chckedIndexs));
      console.log(JSON.stringify($scope.chckedIndexsData));
        if ($scope.chckedIndexs.indexOf(id) === -1) {
            $scope.chckedIndexs.push(id);
            $scope.chckedIndexsData.push(values);
            $scope.selectedCount = $scope.chckedIndexsData.length; 
        }
        else {
            $scope.chckedIndexs.splice($scope.chckedIndexs.indexOf(id), 1);


           $scope.chckedIndexsData.splice(
           $scope.chckedIndexsData.indexOf(values), 
            1);
            $scope.selectedCount = $scope.chckedIndexsData.length; 
        }
    }



    $scope.sendQuestionList = function(){

  $scope.questionsArray = $scope.chckedIndexs;
  $scope.title = $('#title').val();
  var id=window.location.href.substr(window.location.href.lastIndexOf('/') + 
  1);
  $scope.questionsArrayList = {questionID : $scope.questionsArray, "title" : 
  $scope.title}; 
  console.log(JSON.stringify($scope.questionsArrayList));
        var request = $http({
        method: "PUT",
        url: APP_URL+'/api/test/update/'+id,
        data: $scope.questionsArrayList,
        headers: { 'Accept':'application/json' }
       });

    /* Check whether the HTTP Request is successful or not. */
    request.success(function (data) { 

        $scope.getData = data;
        //location.reload();

        console.log(JSON.stringify(data));
   $window.location.href = APP_URL+'/mocktest/all';
        $('#loading').css('display', 'none');  
        document.getElementById("res").value = JSON.stringify(data);
    })
    .error(function (data, status, headers, config) {  

         console.log(JSON.stringify(data));
    });       

    }

     });
  </script>
  <!--------------------------------------------- dual list box   ----------- 
    -------------------------------------------------------> 

   @stop

В приведенном выше коде код, который я использую для двойного списка:

 <div class="form-group">
  <select  multiple ng-model="data.value" id="exampleInputEmail"  name="duallistbox_demo1[]">
    <option ng-repeat="d in data">@{{d.question_title}}</option>
  </select> 
</div>

И для этого я использую следующий скрипт

var demo1 = $('select[name="duallistbox_demo1[]"]').bootstrapDualListbox();
...