我有一个显示项目列表的 jQuery Mobile 应用程序。单击向上或向下按钮时,我可以选择一个项目并将其向上或向下移动。
当我通过单击按钮向上或向下移动项目时,显示的项目以及它们的项目 ID 都会被交换。然后我发送一条 ajax 发布消息,其中包含项目移动的步骤。
我所看到的是,如果我点击得太快,有时项目不会按照预期的方式移动。也可能发生 item-id 重复的情况,就好像函数在 item-id 交换操作的中间被中断一样。
这是一个已知的功能吗?有没有办法避免这种情况?
这是移动项目的代码
$("#btnListUp").on( "click", function(evt)
{
if( selectedItem && !selectedItem.hasClass('ui-first-child') )
{
var prev = selectedItem.prev();
var prevId = prev.attr('item-id');
var thisId = selectedItem.attr('item-id');
var step = (parseInt(prevId) - parseInt(thisId))+'';
prev.attr('item-id', thisId );
selectedItem.attr('item-id', prevId );
prev.detach().insertAfter(selectedItem);
$('#ShopList').listview('refresh');
$.ajax( {type: 'POST', url: thisId+'/moveUp', data : step,
contentType :'applicatio/octet-stream' } );
}
});
$("#btnListDown").on( "click", function(evt)
{
if( selectedItem && !selectedItem.hasClass('ui-last-child') )
{
var next = selectedItem.next();
var nextId = next.attr('item-id');
var thisId = selectedItem.attr('item-id');
var step = (parseInt(nextId) - parseInt(thisId))+'';
next.attr('item-id', thisId );
selectedItem.attr('item-id', nextId );
next.detach().insertBefore(selectedItem);
$('#ShopList').listview('refresh');
$.ajax( {type: 'POST', url: thisId+'/moveDown', data : step,
contentType :'applicatio/octet-stream' } );
}
});