1

因此,当我重新排序列表时,只要我放下项目,它就会将位置提交给我的后端代码,并在后端重新排序列表。但是,我遇到的情况是,如果我重新排序非常快,一段时间后前端和后端的列表不再同步。所以我想在我放下片刻后立即禁用拖动以避免竞争条件。

function reorder(panelId, type){
    $(escapeClientId(panelId)).sortable({
        start: function(event, ui){
            ui.item.startPos = ui.item.index();
        },
        stop: function(event, ui){
            //submit my start and end position to the server
            //change the cursor to wait
            $('body').css('cursor', 'wait');
            window.setTimeout(wait,600);                                    
        }
    });
    $(escapeClientId(panelId)).disableSelection();
}
function wait(){
    $('body').css('cursor', 'default');
}

如您所见,我将光标更改为wait光标 600 毫秒,但是即使光标处于等待模式,它仍然允许用户拖动以重新排序。有没有办法在我放下后立即完全禁用拖动?

4

1 回答 1

2

您可以尝试使用禁用启用方法:

function reorder(panelId, type) {
    $(escapeClientId(panelId)).sortable({
        start: function (event, ui) {
            ui.item.startPos = ui.item.index();
        },
        stop: function (event, ui) {
            var panel = $(this), 
                body = $('body');

            panel.sortable("disable"); // Disable before submitting.
            body.css('cursor', 'wait');

            //submit my start and end position to the server
            //change the cursor to wait

            setTimeout(function () {
                body.css('cursor', 'default');
                panel.sortable("enable");
            }, 500); // Enable after 500 ms.
        }
    });
    $(escapeClientId(panelId)).disableSelection();
}
于 2012-11-30T23:11:44.103 回答