我对JavaScript不是很熟悉,但是这段代码与我想要的类似,特别是在它包含“删除字段”链接的情况下。这是Javscript函数:
//Add more fields dynamically.
function addField(field,area,limit) {
if(!document.getElementById) return; //Prevent older browsers from getting any further.
var field_area = document.getElementById(area);
var all_inputs = field_area.getElementsByTagName("input"); //Get all the input fields in the given area.
//Find the count of the last element of the list. It will be in the format '<field><number>'. If the
// field given in the argument is 'friend_' the last id will be 'friend_4'.
var last_item = all_inputs.length - 1;
var last = all_inputs[last_item].id;
var count = Number(last.split("_")[1]) + 1;
//If the maximum number of elements have been reached, exit the function.
// If the given limit is lower than 0, infinite number of fields can be created.
if(count > limit && limit > 0) return;
if(document.createElement) { //W3C Dom method.
var li = document.createElement("li");
var input = document.createElement("input");
input.id = field+count;
input.name = field+count;
input.type = "text"; //Type of field - can be any valid input type like text,file,checkbox etc.
li.appendChild(input);
field_area.appendChild(li);
} else { //Older Method
field_area.innerHTML += "<li><input name='"+(field+count)+"' id='"+(field+count)+"' type='text' /></li>";
}
}
以下是表单的HTML:
<form name="frm" method="POST">
<strong>Neutral List</strong><br />
<ol id="neutrals_area">
<li><input type="text" name="neutral_1" id="neutral_1" /> <a style="cursor:pointer;color:blue;" onclick="this.parentNode.parentNode.removeChild(this.parentNode);">Remove Field</a></li>
<li><input type="text" name="neutral_2" id="neutral_2" /> <a style="cursor:pointer;color:blue;" onclick="this.parentNode.parentNode.removeChild(this.parentNode);">Remove Field</a></li>
<li><input type="text" name="neutral_3" id="neutral_3" /> <a style="cursor:pointer;color:blue;" onclick="this.parentNode.parentNode.removeChild(this.parentNode);">Remove Field</a></li>
<li><input type="text" name="neutral_4" id="neutral_4" /> <a style="cursor:pointer;color:blue;" onclick="this.parentNode.parentNode.removeChild(this.parentNode);">Remove Field</a></li>
<li><input type="text" name="neutral_5" id="neutral_5" /> <a style="cursor:pointer;color:blue;" onclick="this.parentNode.parentNode.removeChild(this.parentNode);">Remove Field</a></li>
</ol>
<input type="button" value="Add Neutral Field" onclick="addField('neutrals_area','neutral_',0);" />
</form>
但是,我希望使用“删除链接”代码生成其他字段,而不仅仅是脚本中包含代码的代码。我知道必须调整自定义函数以包含该行为,但是在尝试使该函数工作时遇到各种麻烦。通过编辑代码来读取在addField函数底部的“} else {”之后的旧方法中执行此操作似乎很简单:
} else { //Older Method
field_area.innerHTML += "<li><input name='"+(field+count)+"' id='"+(field+count)+"' type='text' /><a style="cursor:pointer;color:blue;" onclick="this.parentNode.parentNode.removeChild(this.parentNode);">Remove Field</a></li>";
}
但是,我对如何将其包含在W3C DOM方法中感到难过?
答案 0 :(得分:1)
删除if(!document.getElementById)
和if(document.createElement)
条件。每个浏览器都支持它们,以及那些不值得支持的浏览器(让它们抛出错误)。
要将删除方法添加到DOM创建的元素,只需使用onclick
属性即可。您也可以使用standard-compliant addEventListner(),但这需要IE的一些解决方法。请参阅Legacy Internet Explorer and attachEvent和Older way to register event listeners部分。
所以代码是
...
li.appendChild(document.createTextNode(" ");
var a = document.createElement("a");
a.appendChild(document.createTextNode("Remove Field"));
a.style = "cursor:pointer;color:blue;";
a.onclick = function() {
// this.parentNode.parentNode.removeChild(this.parentNode);
// nay. we have better references to those objects:
field_area.removeChild(li);
};
li.appendChild(a);
答案 1 :(得分:1)
我将与Kappa不同,并鼓励你继续做你正在做的事情。 JQUery非常适合它,但它经常是一个拐杖,而且知道你正在做什么以及为什么你在使用javascript时这样做是非常重要的。特别是如果你正在学习这个领域的工作,你将需要直接的JavaScript。
好消息,你要做的事实上很简单!
var li = document.createElement("li");
var input = document.createElement("input");
input.id = field+count;
input.name = field+count;
input.type = "text"; //Type of field - can be any valid input type like text,file,checkbox etc.
li.appendChild(input);
field_area.appendChild(li);
//create the removal link
removalLink = document.createElement('a');
removalLink.onclick = function(){
this.parentNode.parentNode.removeChild(this.parentNode)
}
removalText = document.createTextNode('Remove Field');
removalLink.appendChild(removalText);
li.appendChild(removalLink);
以下是JSFiddle上的代码:http://jsfiddle.net/r9bRT/
答案 2 :(得分:-1)
我强烈建议你看看jQuery(ora类似:原型,motools等......)
他们拥有全功能的DOM操作功能,这使得你所要求的内容与编写1行js一样复杂。