Вы должны сделать элементы перетаскиваемыми / не перетаскиваемыми в обратном вызове Ajax после перезаписи HTML-кода контейнера. Поскольку после перезаписи HTML все подключенные слушатели DOM теряются.
var refresh = $('#refresh');
refresh.html(xmlhttp.responseText);
$('.item', refresh).draggable('enable');
И да, как сказал @pduersteler, jQuery имеет отличные возможности Ajax. load()
метод делает именно то, что вы делаете - загружает HTML в контейнер. $.post()
- это путь.
Кроме того, вам лучше заменить setInterval
на setTimeout
внутри обратного вызова Ajax . Это обеспечит более гладкое обновление.
var postData = { sid: <?=sid?> };
var container = $('#refresh');
var ajaxCallback = function (data) {
container.html(data);
var items = $('.item', container);
if (editMode) {
items.draggable('enable');
} else {
items.draggable('disable');
setTimeout(getScreen, 2000);
}
};
function getScreen() {
$.post('/getScreen.php', postData, ajaxCallback);
}
getScreen();