У меня есть строки таблицы, которые сортируются в зависимости от того, отмечены ли определенные переключатели или нет. Сортировки инициализируются на document.ready
следующим образом:
$(document).ready(function() {
// Return a helper with preserved width of cells
// handy code I got from http://lanitdev.wordpress.com/2009/07/23/make-table-rows-sortable-using-jquery-ui-sortable/
var fixHelper = function(e, ui) {
ui.children().each(function() {
$(this).width($(this).width());
});
return ui;
};
// #opts = table id; tr.ui-state-disabled class = rows not sortable
$("#opts tbody").sortable({
items: 'tr:not(.ui-state-disabled)',
cursor: 'crosshair',
helper: fixHelper
}).disableSelection();
});
У меня есть следующая функция, прикрепленная к переключателям (ids prefixed "active_" ) onchange
, которая либо добавляет, либо удаляет атрибут класса ui-state-disabled
из строк таблицы (динамические идентификаторы с префиксом "opt _" ):
var toggleDrag = function(i){
if ($('#active_'+i+'-0').is(':checked')) {
$('#opt_'+i).addClass('ui-state-disabled');
}
if ($('#active_'+i+'-1').is(':checked')) {
$('#opt_'+i).removeClass();
}
$("#opts tbody").sortable("option", "items", "tr:not(.ui-state-disabled)");
//$("#opts tbody").sortable("refresh");
//alert($('#opt_'+i).attr('class')); - alert indicates that the class attribute is being changed
//$("#opts tbody").sortable("option", "cursor", "auto"); - this works!
}
Если я выберу переключатель, который должен сделать ранее не сортируемую сортировку строк, он будет работать, и я могу перетащить строку. Проблема в том, что если я выбираю переключатель, чтобы сделать строку, которая ранее была сортируемой, не сортируемой, я все равно могу ее перетащить. Установитель .sortable("option", "items", "tr:not..etc")
не отображает "un-register" строку, если она была ранее отсортирована. Я также попробовал .sortable( "обновить" ) без везения. И я проверил, меняется ли атрибут класса с предупреждением, и это.
Любая помощь с этим будет принята с благодарностью.