form嵌套form行不行?

BILLSJONE 2007-04-01 02:20:42
<form>
<?php while (....){?>
<input type="checkobx">記錄的標題[回復]
<form>
.....
</form>
<?php }?>
</form>
=============================
這是要實現每一條記錄都有一個回復表單(裡面的form)回復該相對的標題,
但又要有對記錄批量刪除的功能(外層的表單,用checkobx選擇批量操作的記錄),

做好後在IE裡不行,不但提交不了表單值,javascript也操作不了form裡的元素,
但在FF裡就沒問題,一切都正常,
這樣嵌套是不好的,怎樣實現這樣的功能:在裡面可以回復(我用了ajax做回復,不能另開頁面的),又可以批量操作記錄??
...全文
5249 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
drawind 2011-09-29
  • 打赏
  • 举报
回复
所以HTML5开始支持在form外的input
zeroleonhart 2007-04-05
  • 打赏
  • 举报
回复
用链接+js
BILLSJONE 2007-04-05
  • 打赏
  • 举报
回复
這樣可以操作上下元素了,可以知道提交哪條記錄了,理論上解決了,今晚測試
<input type=button name="" value="提交回复" onClick="javascript:this.previousSibling.setAttribute('value',this.nextSibling.getAttribute('value'));">
BILLSJONE 2007-04-05
  • 打赏
  • 举报
回复
解决了,不过还不知道在ff里for清空值后为什么不能再setAttribute设置值。
上面用了笨方法,其实不用数组的,
不要将这句放在循环里<input type=hidden name="setID[]" value="">,放在外面改成<input type=hidden name="setID" id="setID" value="">
这样就只有一个setID,不必用数组操作这么麻烦了,
然后提交函数改成这样就知道提交哪条记录了,好简单啊:onclick=setID(this,"setid")
function setID(buttonid,preid){
document.getElementById(preid).value=buttonid.nextSibling.getAttribute('value');
}

BILLSJONE 2007-04-05
  • 打赏
  • 举报
回复
用上下元素方法在ie上解决了,在ff上又出现了怪问题,提交回复按扭:
<input type=hidden name="setID[]" value="">
<input type=button name="" value="提交回复" onlick="setID('formname',this,'setID[]')">
<input type=hidden name="getid" value="<?php echo id?>">
-----------------------------
function setID(formid,buttonid,preid){
for (var i=0;i<document.getElementById(formid).elements.length;i++){
if (document.getElementById(formid).elements[i].name==preid){
document.getElementById(formid).elements[i].value="";
}
}
buttonid.previousSibling.setAttribute('value',buttonid.nextSibling.getAttribute('value'));
}
========================
这样在ie上没问题了,在ff上不能setAttribute赋值给“提交按扭”前面的元素setID[],
for 循环是赋值前清空所有setID[]的值,可以正确清空,但就是因为这个for使setAttribute赋值在ff上出问题,
去掉for在ff上就可以给setID[]设置getid有值了,下面这样就可以:
function setID(formid,buttonid,preid){
buttonid.previousSibling.setAttribute('value',buttonid.nextSibling.getAttribute('value'));
}
为什么?setID[]只能一个有值,我需要在赋值前清空所有setID[]的值,为什么有for循环在ie上行在ff上就不行,在ff上setAttribute和前面的for有什么关系?就差这一点了,惨啊


BILLSJONE 2007-04-04
  • 打赏
  • 举报
回复
用表单数组好象行得通,
<input type=hidden name="setID[]" value="">
<input type=button name="" value="提交回复">
<input type=hidden name="getid" value="<?php echo id?>">
======================
我想这样,将getID[]放在提交回复按扭旁边,点击“提交回复”用将getid的值赋给setID[],
这样只有一个setID[]是有值的,其它都是空,
然后在后台读取所有setID[],有值的就是要回复的id记录了,就可以得到回复内容$_POST["Content".$setID];回复成功后再用js将所有的setID[]设成空值。
这样的操作不能用id名字赋值,要用点击"提交回复"后,将它的下一个元素的值赋给上一个元素,不知道怎么操作上下元素的值?
请问怎么将下一个元素的值传给上一个元素?然后再怎么设置所有setID[]的值为空?
爱着有你 2007-04-04
  • 打赏
  • 举报
回复
你的问题好像是要将一个表单中的内容分开来提交吧。

可以考虑用两个form,分开来提交。
用两个不同ID的普通按钮用javascrip提交,一个提交你希望被包含的form;另一个用来提交主动包含的form。
其中主动包含的form中添加对应的隐藏域,通过javascrip方法给其赋值。
两个form不要互相包含,两个按钮可以放在任意位置。
foolbirdflyfirst 2007-04-04
  • 打赏
  • 举报
回复
ff竟然可以嵌套form.

可以加一条<input type=hidden name="contentID" value="文章唯一id">
程序通过$_POST['contentID']知道提交的是哪一篇文章。
BILLSJONE 2007-04-04
  • 打赏
  • 举报
回复
可以给你的submit input用不同的name,就可以区分开
======================
我用記錄的id給它們命名,id是唯一的,所以所有form裡面的東西名字都不同的,
submit名字也是不同的,但是我又怎麼知道我點擊了哪個submit呢?
helloyou0 2007-04-04
  • 打赏
  • 举报
回复
現在我想去掉嵌套form.全部用一個form,但不知道怎麼識別提交的是第幾第記錄,也就是後台的$_POST["Content".$i];中的i的值不知道怎麼得到,

--------------------------------------------------------------------
可以给你的submit input用不同的name,就可以区分开,
ahu201 2007-04-04
  • 打赏
  • 举报
回复
建议做个多维数组,将checkbox,textarea, button进行绑订.
ray929 2007-04-04
  • 打赏
  • 举报
回复
用表单数组<input type=hidden name="contentID[<?=$id?>]" value="文章唯一id">
li1229363 2007-04-04
  • 打赏
  • 举报
回复
IE也不是不行,得变通下,不能直接嵌套的,要用其他方式,比如说用javascript进行控制
fjytzh 2007-04-04
  • 打赏
  • 举报
回复
可以换种角度考虑
里层的循环照旧,
外层的批量删除可以通过javascript构造sql的方式传递 IDs
delete.php?id[1]=XXX&id[2]=XXX

纯属理论,有待考证
BILLSJONE 2007-04-04
  • 打赏
  • 举报
回复
可以考虑用两个form,分开来提交。
====================
怎麼分開?分開checkbox多項選擇刪除怎麼實現?
BILLSJONE 2007-04-04
  • 打赏
  • 举报
回复
可以加一条<input type=hidden name="contentID" value="文章唯一id">
程序通过$_POST['contentID']知道提交的是哪一篇文章。
====================
會有很多個<input type=hidden name="contentID" value="文章唯一id">,循環一次就有一個,重名$_POST['contentID']會了錯
Jeremiah 2007-04-03
  • 打赏
  • 举报
回复
不行.
BILLSJONE 2007-04-03
  • 打赏
  • 举报
回复
在firefox中正常沒有問題,做的時候沒在ie上測試,做好後才發現在ie上不行。
BILLSJONE 2007-04-03
  • 打赏
  • 举报
回复
但我想要有這樣的功能不嵌套怎麼實現
-------------------
没想通为什么非要嵌套
=============================
<form name="main_form" id="main_form">

<input type="checkobx" name="selectid[]" id="selectid[]">記錄的標題[回復]
<form>
<textarea name="Content" id="Content">textarea>
<input type="submit" name="Submit" value="提交加復">
</form>
--------------
<input type="checkobx" name="selectid[]" id="selectid[]">記錄的標題[回復]
<form>
<textarea name="Content" id="Content">textarea>
<input type="submit" name="Submit" value="提交加復">
</form>
--------------
<input type="checkobx" name="selectid[]" id="selectid[]">記錄的標題[回復]
<form>
<textarea name="Content" id="Content">textarea>
<input type="submit" name="Submit" value="提交加復">
</form>
-------------
<input type="checkobx" name="selectid[]" id="selectid[]">記錄的標題[回復]
<form>
<textarea name="Content" id="Content">textarea>
<input type="submit" name="Submit" value="提交加復">
</form>
-------------
<input type="button" name="Submit" value="全選" onClick="select_all('main_form','selectid[]');">
<input type="button" name="Submit" value="取消選擇">
<input type="submit" name="Submit" value="刪除記錄">
</form>
==============================
循環輸出後結構就是這樣,每條記錄有一個回復功能,又可以批量刪除記錄,
如果回復是另開窗口的就不用嵌套了,但我用了ajax做無刷新回復,點擊[回復]在相應的記錄下顯示原本隱藏起來的textarea輸入框,直接對這條記錄回復。回復成功後又隱藏textarea輸入框顯示回復內容,整個過程都不用刷新網頁。
textarea名字是動態命名,不會重復的,
<textarea name="Content<?php echo $i?>" id="Content<?php echo $i?>"></textarea>
後台用$_POST["Content".$i];
現在我想去掉嵌套form.全部用一個form,但不知道怎麼識別提交的是第幾第記錄,也就是後台的$_POST["Content".$i];中的i的值不知道怎麼得到,
dj0628 2007-04-03
  • 打赏
  • 举报
回复
应该是不可以,但我想一定有办法避开
加载更多回复(15)

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧