如何不允许用户在扩展表单javascript函数中删除原始表单
How do I not allow a user to remove the original form in an extend forms javascript function?
http://www.quirksmode.org/dom/domform.html
我正在尝试实现这个网站中教授的功能,允许用户扩展表单,它运行良好,但第一个/原始表单也有一个删除按钮,因此用户实际上可以删除唯一的表单(尽管他/她可以将其添加回来(。如何不显示第一个表单的删除按钮?
html:
<div id="readroot" style="display: none">
<input type="button" value="Remove review"
onclick="this.parentNode.parentNode.removeChild(this.parentNode);" /><br /><br />
<input name="cd" value="title" />
<select name="rankingsel">
<option>Rating</option>
<option value="excellent">Excellent</option>
<option value="good">Good</option>
<option value="ok">OK</option>
<option value="poor">Poor</option>
<option value="bad">Bad</option>
</select><br /><br />
<textarea rows="5" cols="20" name="review">Short review</textarea>
<br />Radio buttons included to test them in Explorer:<br />
<input type="radio" name="something" value="test1" />Test 1<br />
<input type="radio" name="something" value="test2" />Test 2
</div><form method="post" action="/cgi-bin/show_params.cgi">
<span id="writeroot"></span>
<input type="button" onclick="moreFields()" value="Give me more fields!" />
<input type="submit" value="Send form" /></form>
javascript:
<script>
var counter = 0;
function moreFields() {
counter++;
var newFields = document.getElementById('readroot').cloneNode(true);
newFields.id = '';
newFields.style.display = 'block';
var newField = newFields.childNodes;
for (var i=0;i<newField.length;i++) {
var theName = newField[i].name
if (theName)
newField[i].name = theName + counter;
}
var insertHere = document.getElementById('writeroot');
insertHere.parentNode.insertBefore(newFields,insertHere);
}
window.onload = moreFields;
</script>
根据您提供的代码,如果您不想在默认情况下显示表单,您只需要在页面加载时删除对moreFields((方法的调用。
通过删除js脚本的最后一行
window.onload = moreFields;
您将阻止在页面加载时创建表单。以下是JFiddle中经过调整的代码,无论是否使用window.onload调用,您都可以看到它的作用:
带OnLoad:https://jsfiddle.net/hyyjzjh1/
无OnLoad:https://jsfiddle.net/hyyjzjh1/1/
更新:
我重新阅读了这个问题,意识到阿尔文想阻止第一种形式被取消。我玩过这个代码,我相信这会奏效:
HTML:
<body>
<div id="readroot" style="display: none">
<!--Hide the button by default-->
<input type="button" value="Remove review" onclick="RemoveReview(this)" style="display: none" /><br /><br />
<input name="cd" value="title" />
<select name="rankingsel">
<option>Rating</option>
<option value="excellent">Excellent</option>
<option value="good">Good</option>
<option value="ok">OK</option>
<option value="poor">Poor</option>
<option value="bad">Bad</option>
</select><br /><br />
<textarea rows="5" cols="20" name="review">Short review</textarea>
<br />Radio buttons included to test them in Explorer:<br />
<input type="radio" name="something" value="test1" />Test 1<br />
<input type="radio" name="something" value="test2" />Test 2
</div><form method="post" action="/cgi-bin/show_params.cgi">
<span id="writeroot"></span>
<input type="button" onclick="moreFields()" value="Give me more fields!" />
<input type="submit" value="Send form" /></form>
</body>
JAVASCRIPT
var counter = 0;
function moreFields() {
counter++;
var newFields = document.getElementById('readroot').cloneNode(true);
//This will only run the second time a form is created. It basically unhides the Remove Review button
if (counter >1)
newFields.childNodes[3].style.display = "block";
//A separate ID is assigned to each form which is later used to identify the form to be removed
newFields.id = counter;
newFields.style.display = 'block';
var newField = newFields.childNodes;
for (var i=0;i<newField.length;i++) {
var theName = newField[i].name
if (theName)
newField[i].name = theName + counter;
}
var insertHere = document.getElementById('writeroot');
insertHere.parentNode.insertBefore(newFields,insertHere);
}
function RemoveReview (node){
//The check below is probably not needed since the remove button will never show for the first form but just in case...
if (node.parentNode.id > 1)
node.parentNode.parentNode.removeChild(node.parentNode)
}
相关文章:
- 在一次点击中发布到两个表单 JavaScript
- 有人可以告诉我如何调试这个 html 表单/javascript 组合
- 2 函数必须为真才能提交表单.(Javascript)
- 从表单javascript返回值时出现问题
- 从php中的mysql中复制带有嵌入式下拉列表的html表单javascript
- 使用谷歌表单javascript插件而不向公众发布
- 联系表单Javascript/Ajax/PHP不是't工作
- 将信息从表单传递到表单Javascript
- 提交表单javascript后处理完整事件
- 将变量传递给 HTML 表单 Javascript
- 当浏览器窗口关闭时,表单/JavaScript 数据会发生什么
- 从表单 javascript 中读取数字值
- 网页过滤器表单.Javascript 不允许使用多个字段
- 联系表单javascript验证被淘汰了
- 将表单 Javascript 的总数相加
- HTML 表单 JavaScript 被忽略
- 从简单的XSD文件生成HTML表单 - javascript
- 验证表单javascript
- 如果选中了复选框,则不要't验证运输表单-JavaScript
- 在html表单(javascript)中显示变量的内容