Yajra 如何在不使用 onclick 的情况下将 ID 从 html 解析为 ajax

Yajra How to parsing ID from html to ajax without using onclick

我的数据table 有超过 1 个标签。我想将 post 的 table 中的数据显示到数据 table 中,但在我的 post table 中我有 LanguageID 列。所以,我想通过 LanguageID 分隔数据,这就是我使用选项卡的原因。但是,当我想获取 LanguageID 时遇到了问题。

这是我的观点。抱歉,我不能post代码和使用图像,因为我的代码中有@foreach。

这是我的 ajax

$(function() {
  var id = 1;
  var oTable = $("#data-post" + id).DataTable({
    processing: true,
    serverSide: true,
    ajax: {
      url: "{{ url("
      post ") }}",
      data: function(d) {
        d.LanguageID = id;
      }
    },
    columns: [{
        data: 'PostDate',
        name: 'PostDate'
      },
      {
        data: 'PostTitle',
        name: 'PostTitle'
      },
      {
        data: 'PostSlug',
        name: 'PostTitle'
      },
      {
        data: 'action',
        name: 'action'
      }
    ]
  });

  $('#tabPost' + id).on('click', function(e) {
    oTable.draw();
    e.preventDefault();
  });

});

我想将 {{$language->id}} 从 html 解析到我的 ajax.. 但我不知道如何不使用函数 onclick

将 language_id 添加到您的数据表,但使其不可见。最好将其放在第一列中。 (以后如果需要添加列,就不需要修改脚本了)

然后当您单击选项卡时,使用以下脚本根据不可见的 language_id 列过滤 DataTable;

标签:

@foreach($languages as $language)                 
    <li>
        <a href="#lang-{{ $language->id }}" class="language-tab" data-language-id="{{ $language->id }}" data-toggle="tab">{{ $language->title }}</a>
    </li>
@endforeach 

脚本(我假设您在第二列中有不可见的语言列)

$('a.language-tab').click(function () {        
    table.api().columns(1).search($(this).attr('data-language-id'), false, false, true).draw();
});

您还可以有一个 All 选项卡来显示所有语言的所有帖子。

标签

<li>
    <a href="#lang-all" class="language-tab" data-language-id="all" data-toggle="tab">All Languages</a>
</li>
@foreach($languages as $language)                 
    <li>
        <a href="#lang-{{ $language->id }}" class="language-tab" data-language-id="{{ $language->id }}" data-toggle="tab">{{ $language->title }}</a>
    </li>
@endforeach 

脚本:

$('a.language-tab').click(function () {        
    if ($(this).attr('data-language-id') == 'all')
        table.api().columns(1).search('', false, false, true).draw();
    else                               
        table.api().columns(1).search($(this).attr('data-status-id'), false, false, true).draw();
});

您还可以在 DataTable 的第一个 ajax 请求中过滤它(类似于 默认过滤 )。

'data' => "function (data) {                                                     
    data.columns[1].search.value = '{{ $language->id }}'
}

问题为什么我取不到id,那是因为我只取到第一个id..所以,我决定用each来取所有id

$('.tabPost').each(function(){
var lang_id = $(this).attr('id');
var oTable = $("#data-post" + lang_id).DataTable({
  processing: true,
  serverSide: true,
  ajax:{
    url: "{{ url("post") }}",
    data: function(d) {
      d.LanguageID = lang_id
    }
  },
  columns: [
      { data: 'PostDate', name: 'PostDate'},
      { data: 'PostTitle', name: 'PostTitle' },
      { data: 'PostSlug', name: 'PostTitle' },
      { data: 'action', name: 'action'}
  ]
});

$('#'+lang_id).on('click', function(e){
  oTable.draw();
  e.preventDefault();
});

});