Как отключить кнопку пользовательских таблиц данных при обратном вызове действия?

#javascript #c# #jquery #datatables

#javascript #c# #jquery #таблицы данных

Вопрос:

Это в C # ASP.NET Веб-приложение MVC 5, использующее таблицы данных версии 1.10.22.

Я настраиваю DataTable на наличие пользовательской кнопки. Действие для кнопки — это функция обратного вызова. После того, как эта функция будет выполнена один раз, я хочу отключить кнопку.

Я могу отключить все кнопки, связанные с таблицей данных. Но как мне отключить только одну кнопку?

Документация по таблицам данных, такая как https://datatables.net/reference/api/buttons ().disable(), есть пример, который, кажется, идентифицирует определенные кнопки по … их имени класса CSS?

 var table = $('#myTable').DataTable();
var buttons = table.buttons( ['.edit', '.delete'] );
buttons.disable();
 

Но как мне однозначно идентифицировать мою пользовательскую кнопку?

Функция обратного вызова действия для кнопки, похоже, снабжена несколькими параметрами, которые представляют кнопку. Но, node похоже, у нее нет disable() функции. Изменение config.enabled на false не имеет никакого эффекта. Что еще я могу попробовать?

Следующее, что я пытаюсь сделать в моих Views/Foo/Index.cshtml:

 <script>
  $( document ).ready( onReady );



  function onReady()
  {
    var config = {};

    config.buttons =
    [
      // A button to create data for the table.
      {
        text: '<span class="fa fa-plus"/>',
        titleAttr: 'Create states',
        action: createStates,
        enabled: true,
      }

      ... other buttons ...
    ];

    ... other configuration ...

    $( '#state-table' ).DataTable( config ) );
  }



  /**
   * Create the states.
   * 
   * Parameters:
   * e (object): The event.
   * table (object): The DataTable.
   * node (jQuery): The jQuery instance of the button that was clicked.
   * config (object): The button configuration.
   */
  function createStates( e, table, node, config )
  {
    //------------------------------
    // Create client-side state data in the table.
    table.clear();

    for ( var i = 0; i < 3; i   )
    {
      var data = { Id: i, Name: 'state '   i };
      table.row.add( data );
    }

    //------------------------------
    // Calling draw() at the end updates the DataTable internal caches.
    table.rows().draw();

    //------------------------------
    // Disable the button, so that states cannot be created again.
    // *** How ? ***

    // Just changing this property has no effect on the button.
    config.enabled = false;

    // This disables all buttons, not just the one I want.
    table.buttons().disable();
  }
</script>
 

Ответ №1:

Каждой кнопке DataTables может быть присвоено имя кнопки и / или имя класса, а затем вы можете ссылаться на эту кнопку, используя любой из них — например:

 $(document).ready(function() {

  var table = $('#myTable').DataTable( {
    dom: 'Bfrtip',
    "buttons": [
      {
        text: 'My Button',
        className: 'myButtonClass',
        name: 'myButtonName'
      }
    ]
  } );

  table.buttons( '.myButtonClass' ).disable();
  //table.buttons( 'myButtonName:name' ).disable();

});
 

В приведенном выше примере кнопка имеет как имя кнопки, так и имя класса.

Существуют различные дополнительные способы выбора одной или нескольких кнопок:

 buttons( selector );
 

Эти selector параметры описаны здесь .

И, да, этот пример в вашем вопросе…

 var buttons = table.buttons( ['.edit', '.delete'] );
 

… действительно ли используется селектор имени класса.

Комментарии:

1. Спасибо @andrewjames, это работает отлично.