я просто хочу заменить текст на onclick, загрузить и заменить с окончательным текстом:
$("#rebuild").click(function(){
$("#rebuild").replaceWith("in progress...").load("/rebuild").replaceWith("end !");
});
Сценарий /rebuild правильно загружен, но окончательная замена не отображается... почему?
load
- это асинхронный метод ajax. Это означает, что ваш final replaceWith
происходит до того, как данные с сервера будут помещены в элемент. Цепь replaceWith
на том же элементе в лучшем случае встряхивает, так как после его замены он больше не существует и, следовательно, нет ничего для следующей replace
Если вы хотите, чтобы он был заменен после того, как вам нужно использовать полный обратный вызов 'load
$("#rebuild").click(function () {
$(this).html("in progress...").load("/rebuild", function () {
setTimeout(function(){
$(this).html( "end !");
}, 2000)
})
});
Я использовал setTimeout
для окончательного изменения, поэтому он не мгновен, или вся загрузка не имеет смысла. Также используется html()
а не replaceWith
так что элемент все еще существует, и только его содержимое изменяется
Load принимает аргумент функции после ее завершения.
$("#rebuild").click(function(){
$("#rebuild").replaceWith("in progress...").load("/rebuild", function(){
$(this).replaceWith("end !");
});
});
EDIT: Дурн, кто-то избил меня: P