jQuery 行取消选择的不同行为,我不明白为什么
Different behaviors on jQuery row deselect, and I don't understand why
我有两个代码变体,每个变体都有一个所需的行为和一个不需要的行为...但我不明白为什么会发生这种情况,或者如何将它们组合起来以获得两种所需的行为。 (我尝试了 if/else 语句的不同变体,试图在一个代码中获得两种所需的行为,但到目前为止我没有成功。
变体 1:http://jsfiddle.net/crashvector/q81m7sab/15/
正确的行为:你可以select一行,改变出现的下拉列表,(下拉值写入table)和您可以删除select 行。 (选中-取消选中列从 1 更新为 0。)
不良行为: 您可以 select 一行,然后立即取消 select 它。 check-uncheck 列从 1 更新为 0,BUT 下拉列表不会将其当前值写入 table 并且消失。
}).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/
正确行为:你可以select一行,然后立即删除select它。选中-取消选中列从 1 更新为 0,下拉值写入 table 并消失。
不良行为: 您可以 select 一行,更改出现的下拉列表,(下拉值写入 table)和您可以删除select 行。 但是 选中-取消选中列不会从 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();
};
最终目标 一个既有正确行为又没有不良行为的函数。
来自您的 jsFiddle "Variation 1"...只需更改条件(第 222 行):
if(!Category && !Category.length) {
至:
if($(row.node()).find('select').length){
因此,如果当用户取消选中该行时 <select>
仍然存在,它将执行 writeCell()
。
我有两个代码变体,每个变体都有一个所需的行为和一个不需要的行为...但我不明白为什么会发生这种情况,或者如何将它们组合起来以获得两种所需的行为。 (我尝试了 if/else 语句的不同变体,试图在一个代码中获得两种所需的行为,但到目前为止我没有成功。
变体 1:http://jsfiddle.net/crashvector/q81m7sab/15/
正确的行为:你可以select一行,改变出现的下拉列表,(下拉值写入table)和您可以删除select 行。 (选中-取消选中列从 1 更新为 0。)
不良行为: 您可以 select 一行,然后立即取消 select 它。 check-uncheck 列从 1 更新为 0,BUT 下拉列表不会将其当前值写入 table 并且消失。
}).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/
正确行为:你可以select一行,然后立即删除select它。选中-取消选中列从 1 更新为 0,下拉值写入 table 并消失。
不良行为: 您可以 select 一行,更改出现的下拉列表,(下拉值写入 table)和您可以删除select 行。 但是 选中-取消选中列不会从 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();
};
最终目标 一个既有正确行为又没有不良行为的函数。
来自您的 jsFiddle "Variation 1"...只需更改条件(第 222 行):
if(!Category && !Category.length) {
至:
if($(row.node()).find('select').length){
因此,如果当用户取消选中该行时 <select>
仍然存在,它将执行 writeCell()
。