<html>
<head>
<title>动态添加html元素</title>
<script type="text/javascript">
<!--
var textNumber = 1;
function addCheckDetail(form,afterElement){
textNumber++;
//创建列表标签
var label2=document.createElement("label");
label2.appendChild(document.createTextNode("问题所属方面:"));
var select=document.createElement("select");
select.setAttribute("select","select"+textNumber);
select.setAttribute("size","1");
select.setAttribute("id","select"+textNumber);
var option1=document.createElement("option");
option1.setAttribute("value","1");
option1.appendChild(document.createTextNode("方面一"));
var option2=document.createElement("option");
option2.setAttribute("value","2");
option2.appendChild(document.createTextNode("方面二"));
label2.appendChild(select);
select.appendChild(option1);
select.appendChild(option2);
form.insertBefore(label2,afterElement);
// 创建文本标签
var label1 = document.createElement("label");
// 创建文本框
var textField = document.createElement("textarea");
textField.setAttribute("name","txt"+textNumber);
textField.setAttribute("cols",80);
textField.setAttribute("rows",3);
textField.setAttribute("id","txt"+textNumber);
// 增加标签文本注释
label1.appendChild(document.createTextNode("问题描述"+textNumber+":"));
// 把textField放入标签中
label1.appendChild(textField);
// 把所有的这些增加到form中
form.insertBefore(label1,afterElement);
}
function removeCheckDetail(form,afterElement){
// 假如有文本框个数超过一个
if (textNumber > 1) {
// 删除最后一个添加的文本框
form.removeChild(document.getElementById("select"+textNumber).parentNode);
form.removeChild(document.getElementById("txt"+textNumber).parentNode);
textNumber--;
}
}
//-->
</script>
<style type="text/css">
<!--
label {
display:block;
margin:.25em 0em;
}
-->
</style>
</head>
<body>
<form id="myForm" method="get" action="./" />
<table><tbody>
<label>问题所属方面:
<select name="select" size="1" id="">
<option value="1">问题一</option>
<option value="2">问题二</option>
</select>
</label>
<label>问题描述1:<textarea name="txt1" cols="80" rows="3"></textarea></label>
<p>
<input type="button" value="添加一个问题" onclick="addCheckDetail(this.form,this.parentNode)" />
<input type="button" value="删除最后一个问题" onclick="removeCheckDetail(this.form)" />
</p>
<p><input type="Submit" value="保存" /></p>
</tbody></table>
</form>
</body>
</html>
我想用javascript动态增加行,当form中没有table标签时是可以增加的,像上面增加了table标签就出现错误了,请问各位该如何解决?
=======================================
解决方案:
由于form.insertBefore是将指定节点添加到form的直接子节点上,由于form中只有一个table,没有afterElement这个直接子节点.所以会报错.
input标签的parentNode即p标签,它的直接父结点是TBODY标签.所以只能用TBodyElement.insertBefore.进行插入.
把
Js代码
form.insertBefore(label2,afterElement);
form.insertBefore(label1,afterElement);
两句改为:
afterElement.parentNode.insertBefore(label2,afterElement);
afterElement.parentNode.insertBefore(label1,afterElement);
分享到:
相关推荐
9.9 JavaScript遍历table的行和列 9.10 表格按回车自动生成新行 9.11 单击单元格背景变色 9.12 单击表格某行后其他行隐藏 9.13 单击表头实现表格排序 9.14 单击单元格显示行的详细信息 9.15 表格设置为“100%”时...
JavaScript是一种脚本语言,主要用于增加网站的交互性,如制作动态样式、动画,以及在用户按下按钮或提交表单数据时提供响应。它是目前世界上最流行的编程语言之一,不仅用于网页开发,还可以驱动许多基于HTML5的...
需要注意的是: 注意大小写: javascript对大小写十分敏感,className不能够把“N”写成“n”,cssText也不能够把“T”写成“t”,否则无法实现效果。 调用方法: 如果改变className,则事先在样式表中申明类,但...
9.9 JavaScript遍历table的行和列 9.10 表格按回车自动生成新行 9.11 单击单元格背景变色 9.12 单击表格某行后其他行隐藏 9.13 单击表头实现表格排序 9.14 单击单元格显示行的详细信息 9.15 表格设置为“100%”时...
本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增的章节包括jQuery、服务器端JavaScript、图形编程以及 JavaScript式的面向对象。本书不仅适合初学者系统学习,也...
JSHint,JavaScript的静态代码分析工具[•••••• ] JSHint是社区驱动的工具,可检测JavaScript代码中的错误和潜在问题。 由于JSHint非常灵活,因此您可以在希望代码执行的环境中轻松调整它。 JSHint是公开可用的...
本书第6版涵盖了HTML5和ECMAScript5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增的章节包括jQuery、服务器端JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者系统学习,也适合...
本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增的章节包括 jQuery、服务器端 JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者系统学习...
不要增加内置的原型 SWitch模式 避免使用隐式类型转换 使用parseInt()的数值约定 编码约定 命名约定 编写注释 编写API文档 编写可读性强的代码 同行互查 在正式发布时精简代码 运行JSLint ...
本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增的章节包括jQuery、服务器端JavaScript、图形编程以及 JavaScript式的面向对象。本书不仅适合初学者系统学习,也...
这一点,再加上移动web流量的增加,对响应性、动态web设计的需求不断增加,意味着所有web开发人员都需要更新他们的技能——这本书是您快速、相关指导的理想资源。 通过ES2019获取ECMAScript的最新信息,包括类、承诺...
JSHint 是一个社区驱动的工具,用于检测 JavaScript 代码中的错误和潜在问题。 由于 JSHint 非常灵活,您可以在您期望代码执行的环境中轻松调整它。 JSHint 是公开可用的,并且将始终保持这种状态。 该项目旨在帮助 ...
在原版基础上,增加了代码高亮,美化了字体.订正一些拼写错误.
本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增的章节包括 jQuery、服务器端 JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者系统学习...
javascript 蛋糕商城 静态页面 1. 购物车 (1) 商品数量增加减少。会对应修改该商品的价格(单价*数量) (2) 选择商品会修改订单总金额。选择的商品价格相加 (3) 删除时会寻找该商品的节点进行删除 (4) 点击多选会...
控制台能够显示当前页面中的javascript错误以及警告,并提示出错的文件和行号,方便调试,这些错误提示比起浏览器本身提供的错误提示更加 详细且具有参考价值。而且在调试Ajax应用的时候也是特别有用,你能够在...
本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增的章节包括 jQuery、服务器端 JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者系统学习...
不要增加内置的原型 SWitch模式 避免使用隐式类型转换 使用pa eInt()的数值约定 编码约定 命名约定 编写注释 编写API文档 编写可读性强的代码 同行互查 在正式发布时精简代码 运行JSLint 小结 第3章 字面量和构造...
8、增加了2行TOOLBAR,“项目管理”和“任务管理”。 实现右键菜单的各类调用方法。 9、鼠标移动每一任务,会有底色变化,增加了单击任务和项目的方法。 10、显示错误信息时,增加了任务名称显示。 11、“设置开始...