Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery行上的不同行为取消选择,我不明白为什么_Javascript_Jquery_Datatables_Deselect - Fatal编程技术网

Javascript jQuery行上的不同行为取消选择,我不明白为什么

Javascript jQuery行上的不同行为取消选择,我不明白为什么,javascript,jquery,datatables,deselect,Javascript,Jquery,Datatables,Deselect,我有两种代码变体,每种变体都有一个期望的行为和一个不期望的行为。。。但我不明白为什么会发生这种情况,也不明白如何将它们结合起来以获得两种想要的行为。我尝试了if/else语句的不同变体,试图在一个代码中获得两种所需的行为,但到目前为止我没有成功 变更1: 正确行为:您可以选择一行,更改显示的下拉列表,下拉列表值写入表中,并且可以取消选择该行。“取消选中”列将从1更新为0 }).on('deselect', function (e, dt, type) { var dt_indexes =

我有两种代码变体,每种变体都有一个期望的行为和一个不期望的行为。。。但我不明白为什么会发生这种情况,也不明白如何将它们结合起来以获得两种想要的行为。我尝试了if/else语句的不同变体,试图在一个代码中获得两种所需的行为,但到目前为止我没有成功

变更1:

正确行为:您可以选择一行,更改显示的下拉列表,下拉列表值写入表中,并且可以取消选择该行。“取消选中”列将从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();
  };
不需要的行为:您可以选择一行,然后立即取消选择它。check uncheck列从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:

正确行为:您可以选择一行,然后立即取消选择它。check uncheck列从1更新为0,下拉值写入表并消失

不希望出现的行为:您可以选择一行,更改显示的下拉列表,下拉列表值写入表中,并且可以取消选择该行。但是check uncheck列不会从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();
  };
最终目标一个函数,既有正确的行为,也没有不想要的行为。

来自JSFIDLE变体1。。。只需更改第222行的条件:

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


因此,如果用户取消选中该行时该行仍然存在,则它将执行writeCell。

Perfect!非常感谢。我终于可以暂时离开这个项目了!除息的