Различное поведение в строке jQuery отменяет выбор, и я не понимаю, почему - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть два варианта кода, каждый из которых имеет желаемое поведение и нежелательное поведение ... Но я не понимаю, почему это происходит, или как их объединить, чтобы получить оба желаемых поведения. (Я пробовал разные варианты операторов if / else, пытаясь получить оба желаемых поведения в одном коде, но пока безуспешно.

Вариант 1: http://jsfiddle.net/crashvector/q81m7sab/15/

Правильное поведение: Вы можете выбрать строку, изменить появившийся раскрывающийся список (выпадающее значение записывается в таблицу) и отменить выбор строки. (Столбец, отмеченный флажком, обновляется с 1 до 0.)

Нежелательное поведение: Вы можете выбрать строку, а затем сразу же отменить ее выбор. Столбец снятия флажка обновляется с 1 до 0, НО раскрывающийся список не записывает свое текущее значение в таблицу и исчезает.

}).on('deselect', function (e, dt, type) {
    var dt_indexes = dt[0]
    if (type === 'row') { 
      $.each( dt_indexes, function ( index ) {
        var row = dataTable.row( dt_indexes[index] );

        if(!Category && !Category.length) {
        writeCell($(row.node()).find('select'));
        };

        toggleDataAndDraw(row, type, 0); 
     } );     
    }
    dataTable.draw();
  });
var writeCell = dropdown => {
        var currentRow = dataTable.row(dropdown.closest('tr'));
        var rowData = currentRow.data();
        rowData.Category = dropdown.val();
        $(currentRow.node()).find('td:eq(6)').html( 
          currentRow.data().Category
        );
        currentRow.draw();
      };

Вариант 2: http://jsfiddle.net/crashvector/q81m7sab/16/

Правильное поведение: Вы можете выбрать строку, а затем немедленно отменить ее выбор. Столбец, отмеченный флажком, обновляется с 1 до 0, выпадающее значение записывается в таблицу и исчезает.

Нежелательное поведение: Вы можете выбрать строку, изменить появившийся раскрывающийся список (выпадающее значение записывается в таблицу) и отменить выбор строки. НО столбец снятия отметки НЕ ОБНОВЛЯЕТСЯ с 1 до 0.

}).on('deselect', function (e, dt, type) {
    var dt_indexes = dt[0]
    if (type === 'row') { 
      $.each( dt_indexes, function ( index ) {
        var row = dataTable.row( dt_indexes[index] );

        //if(!Category && !Category.length) {
        writeCell($(row.node()).find('select'));
        //};

        toggleDataAndDraw(row, type, 0); 
     } );     
    }
    dataTable.draw();
  });

var writeCell = dropdown => {
    var currentRow = dataTable.row(dropdown.closest('tr'));
    var rowData = currentRow.data();
    rowData.Category = dropdown.val();
    $(currentRow.node()).find('td:eq(6)').html( 
      currentRow.data().Category
    );
    currentRow.draw();
  };

КОНЕЦНАЯ ЦЕЛЬ Одна функция, которая имеет как правильное, так и нежелательное поведение.

1 Ответ

1 голос
/ 20 апреля 2019

Из вашего jsFiddle "Вариация 1" ... Просто измените условие (в строке # 222):

if(!Category && !Category.length) {

до:

if($(row.node()).find('select').length){

Таким образом, он будет выполняться writeCell(), если <select> все еще присутствует, когда пользователь снимает отметку со строки.

...