How to run Datatables.js and x-editabel.js together in laravel

How to run Datatables.js and x-editabel.js together in laravel

609

After long time not updating this blog today I have interesting article for you. How to run Datatables.js and x-editabel.js together in laravel?

If you're using datatables.js in your app and also x-editable.js you will probably notice a common error

a.fn.popover is undefined
Markup

I also published article about x-editable you can find it here.

Error cause

This error caused usually when you use bootstrap 3 CDN version or even local version on tables that loading with datatables. The effect of this error is you are able to edit your codes with x-editable only in page 1 of datatables and when you move to page 2,3,4, etc. you will lose ability of editing your data.

 

How to fix

The fix is simple, all you have to do is to move your x-editable codes inside datatables and load them in fnRowCallback . Let's take a look at sample code below:

 

<script>
    $(document).ready(function() {
        var table = $('#mydata').DataTable({
            "fnRowCallback": function( nRow, mData, iDisplayIndex, iDisplayIndexFull) {
                // add x-editable
                $.fn.editable.defaults.mode = 'inline';
                $.ajaxSetup({
                     headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    }
                });
    
                product_id = $(this).data('pk');
                url = $(this).data('url');
                
                //make stock editable
                $('.stock').editable({
                    url: url,
                    pk: product_id,
                    type:"text",
                    validate:function(value){
                      if($.trim(value) === '')
                      {
                        return 'This field is required';
                      }
                    }
                });
                
                //make weight editable
                $('.weight').editable({
                    url: url,
                    pk: product_id,
                    type:"text",
                    validate:function(value){
                      if($.trim(value) === '')
                      {
                        return 'This field is required';
                      }
                    }
                });
                //make price editable
                $('.price').editable({
                    url: url,
                    pk: product_id,
                    type:"text",
                    validate:function(value){
                      if($.trim(value) === '')
                      {
                        return 'This field is required';
                      }
                    }
                });
                //make discount price editable
                    $('.newprice').editable({
                    url: url,
                    pk: product_id,
                    type:"text"
                });
                // using class not id, since likely used with multiple records
                $('.status').editable({
                  // Note: cleaner to format in the controller and render using the json directive
                  source: [
                      @foreach($statuses as $status)
                          { value: '{{ $status->id }}', text: '{{ $status->title }}' }
                          @unless ($loop->last)
                              ,
                          @endunless
                      @endforeach
                  ]
                });
            },
            //
        });
    });
</script>
JavaScript

 

Demo of code above


video_tutorials

Did you know?

You can learn more from our paid video tutorials at Irando Courses.

- Last updated 4 years ago

Be the first to leave a comment.

You must login to leave a comment