js怎么获取form表单中所有的input和select

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js怎么获取form表单中所有的input和select相关的知识,希望对你有一定的参考价值。

var FormStr = document.getElementById(form).getElementsByTagName("input")||document.getElementById(form).getElementsByTagName("select");
for(Y=0;Y<FormStr.length;Y++)

alert("表单")

这样写法不对啊

难道只能先遍历完input后再遍历select ??

有没有合在一起的方法?

目的是获取form表单中所有的input和select

<script type="text/javascript">

    // 获取指定form中的所有的<input><select>对象

    function getElements(formId)

        var form = document.getElementById(formId);

        if(form == null)

            return false;

       

        var elements = new Array();

        var inputTagElements = form.getElementsByTagName('input');

        for (var j = 0; j < inputTagElements.length; j++)

            elements.push(inputTagElements[j]);

       

        var selectTagElements = form.getElementsByTagName('select');

        for (var j = 0; j < selectTagElements.length; j++)

            elements.push(selectTagElements[j]);    

       

        return elements;

   

扩展资料:

form表单提交

在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮。

(<input type='submit'>)就可以进行数据的提交,每一个input标签都需要有一个name属性,才能进行提交。

当点击登陆时,向数据库发生的数据是:username=username&password=password.

这种默认的提交方式,一般会进行页面的跳转(不成功时跳转到当前页面)。而有时候是对弹出框进行数据提交的,希望提交成功则关闭弹出框并刷选父页面,失败则提示失败原因,且弹出框不关闭。此时可以采用Ajax进行数据提交。

参考技术A

可以获取form对象,然后获取它的所有子元素,并判断元素类型是不是input或select.

var ff=document.forms[0];
for (var i=0;i<ff.elements.length;i++)

var ee=ff.elements[i];
if("INPUT"==ee.tagName||"SELECT"==ee.tagName)
//处理代码
;

本回答被提问者和网友采纳

PHP怎么获取表单中的多条数据

<form action="__URL__/inster/" method="post">
<input style="width:90%; height:18px;" type="text" class="input-text" name="type" id="type" value=""/>
<input style="width:90%; height:18px;" type="text" class="input-text" name="money" id="money" value=""/>
<textarea style="width:90%; height:11px;"class="" name="bask" cols="32" id="bask" /></textarea>
</form>

中间的数据用JS增加了多条,在PHP中怎么写循环。我用的是TP框架
var cell = document.createElement("td");
//cell.appendChild(document.createTextNode(name));
var inputText = document.createElement("input");
inputText.setAttribute("type", "text");
inputText.setAttribute("name", "type");
inputText.style.border = "1px solid #A7A6AA";
inputText.style.width = "90%";
inputText.style.height = "18px";
//inputText.setAttribute("value", name);
cell.appendChild(inputText);
row.appendChild(cell);

inputText.setAttribute("name", "type"); type是表的字段,可能是这名字重复了

在生成的表单元素以及之前的元素的名字加上中括号即可实现
比如: name="contents" => name="contents[]",最后提交获取到的数据是一个数组形式的。

代码如下:

<form name="form1" method="post" action="index.php?action=ok">
1.<input type="text" name="contents[]" value="">
2.<input type="text" name="contents[]" value="">
3.<input type="text" name="contents[]" value="">
<input type="submit" value="提交">
</form>
<?php
if($_GET['action'] == 'ok')
$contents = $_POST['contents'];

print_r($contents);

?>
得到的数据是数组形式的,遍历即可。
参考技术A <input type=checkbox name=laiwen[] value=<?php echo $row[3];?> />
.......

PHP 接受表单:$count=count($_POST["laiwen"]);
for($i = 0; $i<count($_POST["laiwen"]); $i++)
echo $_POST["laiwen"][$i];

大概的意思就是这样 你可以试试看,要插入数据库那就直接在for循环中假如sql语句就可以了
参考技术B 别管用的是什么框架,表单始终都是post的表单,这是无论如何都改变不了的,你只需要用$_POST接收就行了,连循环都不用追问

不循环不行,只写入一条数据

追答

不是你只写了一条数据,因为你用的是js增加了多条嘛,增的的东西,好歹也是DOM元素吧,既然是DOM元素,又是表单项,后台就没有收不到的道理,只是在原码中你看不到这些东西罢了,你可以先试试,看看结果如何

追问

我试过了,比如写三条数据只能插入一条到数据库

追答

你可以这样,
echo '' . htmlspecialchars(print_r($_POST, true)) . '';die;
看看你得到的数据是不是对的,如果这里是对的,那你只需要组织下你的插入语句罢了,仅此而己

追问

嗯,这样也只显示最后的一条,郁闷

追答

那说明不是后台的问题,而是前台js增加表单项的时候,加的名称是不是重复了,最好把名称改成数组形式的如这样形式的

追问

Array
(
[type] => 1
[money] => 1
[bask] =>
[type0] => 2
[money0] => 2
[bask0] =>
[type1] => 3
[money1] => 3
[bask1] =>
[type2] => 4
[money2] => 4
[bask2] =>
[__hash__] => 6fad457aaad0c29a3447e758df8eeb8d
)

现在用echo '' . htmlspecialchars(print_r($_POST, true)) . '';die;可以全部看到了,但是插入还是不行呢

追答

插入的话,不就是组织组织你的数据,弄成SQL语句就行了啊,除了第一组,其它的就是从0开始计数的嘛,一组数据,加个循环,组装个SQL语句,一次执行就完成了呀

参考技术C 对于这个问题,很简单,你是如何解决php接收 checkbox的值的呢?这个也同理。
把表单的 name 属性设置为数组形式的,如 <input style="width:90%; height:18px;" type="text" class="input-text" name="type[]" id="type" value=""/>
<input style="width:90%; height:18px;" type="text" class="input-text" name="type[]" id="type" value=""/>
想几个都行。比如我写的有两个 name 是 type[] 的表单
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
</head>

<body>
<?php
if(isset($_POST['type']))
?>
<pre>
<?php
print_r($_POST);
else
?>
<form action="" method="post">
<input type="text" name="type[]" id="type" value="" />
<input type="text" name="money" id="money" value="" />
<textarea name="bask" cols="32" id="bask"></textarea>
<input type="text" name="type[]" />
<input type="submit" value="提交" />
</form>
<?php ?>
</body>
</html>
提交后结果如下,可以看到所有的值都获取了,其中$_POST['type']是个数组,通过 foreach或for来访问里面的值。 这个方法特别适合 PHP 接收 checkbox 的值。
Array
(
[type] => Array
(
[0] => text1
[1] => text2
)

[money] => 100
[bask] => textarea
)追问

foreach($_POST['dform'] as $key=>$value)
$bo=$_POST['type'][$key][$value];
$bo=$_POST['money'][$key][$value];
$bo=$_POST['bask'][$key][$value];

我这么写怎么取不到值呢 'dform' 是表面名称
下面是数组的结构,高手麻烦你再指点一下,好了我加点分,谢谢!

追答

'dform'是表面名称,这句话我看不懂呀。
首先图中那个数组有三个元素,索引($key)分别是 type, money, bask, __hash__ ,值($value)分别是一个数组,一个数组,一个数组,一个字符串; 所以图中那个是个二维数组。

foreach($_POST['dform'] as $key=>$value)
//获取 "测试一"
$bo=$_POST['dform'][$key][0];
//或者直接 $bo = $value[0]; 因为 $_POST['dform'][$key] 和 $value 是一样的。
// 获取所有的 type
foreach ($value as $v)
echo $v; // 这里直接输出,你也可以作其它处理,比如把 $v 赋值给其它变量等。

追问

dform是指这个表单名,
用$_POST['dform']取不到任何值,还有我这个是多条插入,不用输出的
foreach($_POST['dform'] as $key=>$value)
$bo=$_POST['type'][$key];
$bo=$_POST['money'][$key];
$bo=$_POST['bask'][$key];
这样写不行
我想把值全部给$bo最后一起插入 __hash__ 这个可以不管

追答

form 标签的 name 属性是没用的,一般用在 javascript 操作当前页面的DOM用。对于 PHP 获取表单值用不上。还有你的那个foreach循环中, 三次给 $bo赋值,到最后$bo只能保存一个值,而不能全部保存。 PHP 通过提交表单只能获取 input 、textarea、select等的值。
就拿下面代码说吧

————————————————————————————
PHP 代码:
<?php
$count = count($_POST['type']);
//这里可以 print_r($_POST['type']); 或 print_r($_POST['money']);看一下,其实$_POST['type']和 $_POST['money']都是个一维数组,所以可以用下面的 for 循环来访问

if($count == count($_POST['money']))
$sql = array();
for($i=0; $i<$count; $i++)
$sql[] = "('$_POST['type'][$i]', '$_POST['money'][$i]') ";

$sqlstr = "insert into `table` (`type`, `money`) values ".implode(',', $sql);
echo $sqlstr;
//mysql_query($sqlstr); //假定前面已经打开到数据库的连接了,这里直接保存到数据库了。

本回答被提问者采纳

以上是关于js怎么获取form表单中所有的input和select的主要内容,如果未能解决你的问题,请参考以下文章

js获取form表单所有数据

js获取form表单所有数据

Nodejs中怎么获取HTML中一个form下的所有POST数据?

在jQuery中直接提交表单后怎么获取返回值

form提交,并用js验证手机号码

js 获取table中表单中的值