如何动态增加表单field

如何动态增加表单field,第1张

1. formsets是同一个model的组合,而这里是两个model,(Book和Author)

2. django的form如果用后台渲染的话,是在生成form的时候就确定了form里面的字段,哪怕是动态生成,而这里的需求是前台(js)动态修改form里面的字段(增删字段)

目前我的解决方案是 自己写html模板,已经放弃了form表单,然后ajax传入后台,自己解析,保存。

1、先用document.createElement方法创建一个input元素

复制代码 代码如下:

var newInput = document.createElement("input")

2、设定相关属性,如name,type等

复制代码 代码如下:

newInput.type=mytype

newInput.name="input1"

3、用appendChild方法,将元素追加到某个标签内容中!

复制代码 代码如下:

TemO.appendChild(newInput)

Javascrip核心代码:

复制代码 代码如下:

<script language="javascript">

function AddElement(mytype){

var mytype,TemO=document.getElementById("add")

var newInput = document.createElement("input")

newInput.type=mytype

newInput.name="input1"

TemO.appendChild(newInput)

var newline= document.createElement("br")//创建一个BR标签是为能够换行!

TemO.appendChild(newline)

}

</script>

完整代码如下:

<html >

<head>

<title>动态添加表单元素</title>

</head>

<script language="javascript">

function AddElement(mytype){

var mytype,TemO=document.getElementById("add")

var newInput = document.createElement("input")

newInput.type=mytype

newInput.name="input1"

TemO.appendChild(newInput)

var newline= document.createElement("br")

TemO.appendChild(newline)

}

</script>

<body>

<form action="" method="get" name="frm">

<div id="add">

<input type="text" name="textfield">

</div>

</form>

<input name="" type="button" value="新建文本框" onClick="AddElement('text')" />

<input name="" type="button" value="新建复选框" onClick="AddElement('checkbox')" />

<input name="" type="button" value="新建单选框" onClick="AddElement('radio')" />

<input name="" type="button" value="新建文件域" onClick="AddElement('file')" />

<input name="" type="button" value="新建密码框" onClick="AddElement('password')" />

<input name="" type="button" value="新建提交按钮" onClick="AddElement('submit')" />

<input name="" type="button" value="新建恢复按钮" onClick="AddElement('reset')" />

</body>

</html>

首先,你的file控件要放到form表单内,其次,每个file控件的name属性应该不同。下面是我修改后的:

<html>

</head>

<script language="javascript" type="text/ecmascript">

var x=1

//======================

//功能:在表单中input file控件

//参数:parentID---要插入input file控件的父元素ID

// inputID----input file控件的ID

//======================

function createInput(parentID,inputFileID){

var parent=$(parentID)//获取父元素

var div=document.createElement("div")//创建一个div容器用于包含input file

x++

var divName=inputFileID+x//随机div容器的名称

div.id=divName

var aElement=document.createElement("input")//创建input

aElement.name=divName

aElement.type="file"//设置类型为file

var delBtn=document.createElement("input")//再创建一个用于删除input file的Button

delBtn.type="button"

delBtn.value="删除"

delBtn.onclick=function(){ removeInput(parentID,divName)}//为button设置onclick方法

div.appendChild(aElement)//将input file加入div容器

div.appendChild(delBtn)//将删除按钮加入div容器

parent.appendChild(div)//将div容器加入父元素

}

//============================

//功能:删除一个包含input file的div 容器

//参数:parentID---input file控件的父元素ID

// DelDivID----个包含input file的div 容器ID

//============================

function removeInput(parentID,DelDivID){

var parent=$(parentID)

parent.removeChild($(DelDivID))

}

//通过元素ID获取文档中的元素

function $(v){return document.getElementById(v)}

</script>

<body>

<form action="test.php" method="post" enctype="multipart/form-data">

<div align="left" id="div_Pic" style="border:1px solid #CCCCCC">

<input name="PicFile" type="file" id="ShowPicFile">

</div>

<input type="button" onClick="createInput('div_Pic','PicFile')" name="button" id="button" value="+ 继续添加图片">

<input type="submit" value="提交">

</body>

</html>

然后php就可以通过遍历$_FILES来获得每个上传的文件。下面的简单例子只是列出每个文件的原文件名:

<?php

forEach($_FILES as $f){

 echo $f["name"]."<br>"

}

?>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11664767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存