首先我通過js添加一個按鈕:
let newTextArea = "<div class='row mt-4'><div class='col'><button type='button' class='btn btn-light rimuovi' onclick='removeIt()'>Rimuovi</button></div</div>";
進入頁面后,我可能想將其洗掉,因此單擊即可呼叫該函式:
function removeIt(e) {
e.closest(".row").remove();
}
但我得到
Cannot read properties of undefined (reading 'closest') at removeIt
uj5u.com熱心網友回復:
您只是忘記在 HTML 上的 JS 函式的引數中傳遞您的元素 (e)。
所以,嘗試:
onclick = 'removeIt(this)';
作業示例:
function removeIt(e) {
e.closest(".row").remove();
}
<div class="row">
<button onclick='removeIt(this)'>Rimuovi</button>
</div>
希望這對您有所幫助。
uj5u.com熱心網友回復:
正如其他人提到的,您忘記將“this”作為引數傳遞給您的 removeIt() 方法。在這種情況下,“this”關鍵字指的是使用單擊偵聽器的元素(您的按鈕)。通過將“this”關鍵字設定為引數,JS 現在可以查找具有“row”類的“最近”元素。它從按鈕開始,沿著 dom-tree 向上,直到找到一個具有 className “row” 的元素或直到它到達根。
作業示例:
<!DOCTYPE html>
<html>
<body>
<div class="row mt-4">
<div class="col">
<button
type="button"
class="btn btn-light rimuovi"
onclick="removeIt(this)"
>
Rimuovi
</button>
</div>
</div>
<script>
function removeIt(element) {
closest = element.closest('.row');
closest.remove();
}
</script>
</body>
</html>
uj5u.com熱心網友回復:
主要問題是因為在屬性中e呼叫函式時沒有提供引數。removeIt()onclick
但是您應該注意,使用行內onclick屬性并不是一個好習慣。實作所需的更好方法是附加一個不顯眼的委托事件處理程式,該處理程式接受 Event 物件作為引數。然后,您可以使用該事件來檢索觸發處理程式的 Element 物件。像這樣的東西:
const rowTemplate = document.querySelector('#row-template');
const container = document.querySelector('.container');
const addBtn = document.querySelector('.add');
addBtn.addEventListener('click', () => {
container.innerHTML = rowTemplate.innerHTML;
});
container.addEventListener('click', e => {
if (e.target.matches('.rimuovi'))
e.target.closest('.row').remove();
});
<button class="add">Add</button>
<div class="container"></div>
<template id="row-template">
<div class="row mt-4">
<div class="col">
<button type="button" class="btn btn-light rimuovi">Rimuovi</button>
</div>
</div>
</template>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529050.html
