Javascript删除一个div(removeChild)

Javascript删除一个div(removeChild),javascript,html,javascript-events,Javascript,Html,Javascript Events,首先,我在javascript函数中动态创建一些div(某个按钮的事件处理程序),在每个div中添加一个按钮 newdiv.id = counter; newdiv.innerHTML = "Product " + (counter + 1) + " <br><input type='text' name='myInputs[]'><button onclick=\"return false; document.getElementById(

首先,我在javascript函数中动态创建一些div(某个按钮的事件处理程序),在每个div中添加一个按钮

    newdiv.id = counter;
    newdiv.innerHTML = "Product " + (counter + 1) + " <br><input type='text' name='myInputs[]'><button onclick=\"return false;
    document.getElementById('"+counter+"').parentNode.removeChild('"+counter+"');\">Delete item</button>";
newdiv.id=计数器;
newdiv.innerHTML=“产品”+(计数器+1)+“
删除项目”;
假设在单击按钮时删除该div

这对我不起作用。我想请你们帮忙


谢谢

在执行
removeChild()
调用之前,onclick事件将返回

如果你写得更清楚,你会得到:

function () {
  // leave the function
  return false; 
  // never executed, because you called return right before
  document.getElementById(counter).parentNode.removeChild(counter);
}

你必须在做完你想做的事后返回。移动
返回false
到事件的结尾。

在执行
removeChild()
调用之前,onclick事件将返回

如果你写得更清楚,你会得到:

function () {
  // leave the function
  return false; 
  // never executed, because you called return right before
  document.getElementById(counter).parentNode.removeChild(counter);
}

你必须在做完你想做的事后返回。移动
返回false
到事件结束。

返回结束javascript的执行。return语句之后不会执行任何内容。

code>return结束javascript的执行。return语句之后将不会执行任何内容。

看起来您在代码有机会执行之前返回了false(请尝试将其放在document.getElementById语句链之后)。此外,我不会以加号开头任何HTML属性。

看起来您在代码有机会执行之前返回false(尝试将其放在document.getElementById语句链之后)。另外,我不会以加号开头任何HTML属性。

默认情况下,表单中的按钮是类型submit。要停止它提交表单,请将其设置为
type=“button”
。然后,您不需要返回false,如果需要,它应该位于函数的末尾

另一种方法是使用输入类型按钮。它看起来就像一个按钮,也不会提交表单

使用DOM方法添加额外的元素和监听器要好得多,但这里有一个更容易阅读的innerHTML版本(至少对我来说):

newdiv.innerHTML='Product'+(计数器+1)+'
'+ “删除项目”;
默认情况下,表单中的按钮类型为submit。要停止它提交表单,请将其设置为
type=“button”
。然后,您不需要返回false,如果需要,它应该位于函数的末尾

另一种方法是使用输入类型按钮。它看起来就像一个按钮,也不会提交表单

使用DOM方法添加额外的元素和监听器要好得多,但这里有一个更容易阅读的innerHTML版本(至少对我来说):

newdiv.innerHTML='Product'+(计数器+1)+'
'+ “删除项目”;
除了语句顺序错误外,
removeChild
调用也不正确。必须将DOM元素传递给
removeChild
,而不是ID

虽然可以使用HTML字符串生成所有元素,但我发现在处理事件处理程序时,直接创建DOM元素是一种更干净的方法:

newdiv.id = counter;
newdiv.innerHTML = "Product " + (counter + 1) + " <br><input type='text' name='myInputs[]'>";

var button = document.createElement('button');
button.type = 'button'; // see RobG's answer
button.innerHTML = 'Delete item';
button.onclick = function() {
    this.parentNode.parentNode.removeChild(this.parentNode);
};

newdiv.appendChild(button);
newdiv.id=计数器;
newdiv.innerHTML=“产品”+(计数器+1)+“
”; var button=document.createElement('button'); button.type='button';//见罗布的答案 button.innerHTML='删除项'; button.onclick=函数(){ this.parentNode.parentNode.removeChild(this.parentNode); }; newdiv.appendChild(按钮);
除了语句顺序错误外,
removeChild
调用也不正确。必须将DOM元素传递给
removeChild
,而不是ID

虽然可以使用HTML字符串生成所有元素,但我发现在处理事件处理程序时,直接创建DOM元素是一种更干净的方法:

newdiv.id = counter;
newdiv.innerHTML = "Product " + (counter + 1) + " <br><input type='text' name='myInputs[]'>";

var button = document.createElement('button');
button.type = 'button'; // see RobG's answer
button.innerHTML = 'Delete item';
button.onclick = function() {
    this.parentNode.parentNode.removeChild(this.parentNode);
};

newdiv.appendChild(button);
newdiv.id=计数器;
newdiv.innerHTML=“产品”+(计数器+1)+“
”; var button=document.createElement('button'); button.type='button';//见罗布的答案 button.innerHTML='删除项'; button.onclick=函数(){ this.parentNode.parentNode.removeChild(this.parentNode); }; newdiv.appendChild(按钮);
想想“return”的作用。我的页面上有一个表单,单击该按钮时我不想发布它!进一步:put
返回false在末尾。另外,
+计数器+
字符串是元素的
id
?如果你需要使用字符串连接的话,这会让你大吃一惊。想想“return”的作用吧。我的页面上有一个表单,我不想在点击该按钮时发布它!进一步:put
返回false在末尾。另外,
+计数器+
字符串是元素的
id
?如果你需要使用字符串连接,这会让你大吃一惊。当我在调用removeChild后返回时,它会提交我的表单(不应该),除此之外,
removeChild
需要的是DOM元素,而不是ID(或任何
计数器
是什么)@Damarawy:发生这种情况可能是因为整个
removeChild
行抛出了一个错误@Damarawy:检查浏览器的控制台日志,您的removeChild()代码可能有错误。您在计数器周围的单引号似乎非常错误,应该会抛出错误。@FelixKling谢谢,我想我实际上是在向“removeChild”传递一个ID,而不是DOM元素。。您能把它作为一个答案,让我投赞成票吗?当我在调用removeChild后放置返回时,它会提交我的表单(不应该),
removeChild
需要一个DOM元素,而不是ID(或任何
计数器
是什么)@Damarawy:发生这种情况可能是因为整个
removeChild
行抛出了一个错误@Damarawy:检查浏览器的控制台日志,您的removeChild()代码可能有错误。你的单引号在计数器s附近