#javascript #button #fetch
#javascript #кнопка #принести
Вопрос:
Я пытаюсь отключить import_button
, когда я нажимаю на него, и включить его, когда fetch
это будет сделано. Я пытался сделать это следующим образом (код ниже), но, к сожалению, это не работает.
Дополнительный вопрос: могу ли я пропустить эти две строки кода let import_button = document.getElementById('import_button'); import_button.disabled = true;
и сделать что-то подобное? this.disabled = true;
<button id="import_button" onclick="fetchProducts(event);">Import</button>
function fetchProducts(e) {
e.preventDefault();
let import_button = document.getElementById('import_button');
import_button.disabled = true;
fetch('/api/v1/products', {
method: 'GET'
})
.then(response => response.json())
.then(products =>
import_result.innerHTML = `Updated: ${products.updated}`
)
.then(import_button.disabled = false)
}
Ответ №1:
Этот финал then
все еще должен быть функцией
.then(() => import_button.disabled = false)
или просто включите его в предыдущий then
.then(products => {
import_result.innerHTML = `Updated: ${products.updated}`;
import_button.disabled = false
})
Дополнительный вопрос: вроде того. Это цель события
function fetchProducts(e){
let import_button = e.target;
console.log(import_button)
import_button.disabled = true;
}
<button id="import_button" onclick="fetchProducts(event);">Import</button>
Так что сделай это let import_button = e.target
Ответ №2:
Вам следует рассмотреть возможность изменения отключенного состояния внутри finally
, а then
не для того, чтобы вы catch
также могли обработать ошибку.
Вы можете сохранить ссылку на кнопку, используя this
:
function fetchProducts(e) {
e.preventDefault();
let import_button = this;
import_button.disabled = true;
fetch('/api/v1/products', {
method: 'GET'
})
.then(response => response.json())
.then(products =>
import_result.innerHTML = `Updated: ${products.updated}`
)
.catch(error => console.log(error))
.finally(() => (import_result.disabled = false))
}