与form联合翻译: QQLan
在Netscape中, form和layer不能很好的结合. 因为Netscape中的layer是相对独立的, 一个form跨几个层就会无效. 例如, 下面的代码能在IE里很好的工作, 但是在Netscape中完全无效.
解决方法是你必须在每一个层里写form:
但是当你需要在javascript 中获得表单中的值或者需要把信息发送到一个CGI程序来处理, 这样做将会遇到困难. 最终的解决方案是用javascript来"粘合"这些数据.
记住,在Netscape中,不管在层中, 还是不在你都必须对form作声明:
document.layerName.document.formName.fieldName.value
但是IE中, 你只要对不在层中的进行声明.
document.formName.fieldName.value
基于这个想法, 你可以写一些代码从不同的区域把数据提取出来
if (ns4) {
field1value = document.layer1.document.form1.field1.value
field2value = document.layer2.document.form2.field2.value
}
if (ie4) {
field1value = document.form1.field1.value
field2value = document.form2.field2.value
}
那么如果想把表单发送到CGI程序呢? CGI只能接受来自一个form的数据. 因此你能做的就是创建另一个form,包含有hidden fields.
在
mainForm 中的hidden field 被其他的表单赋值. 你可以把这个form发送给CGI.
function sendForm() {
if (ns4) {
document.mainForm.field1.value = document.layer1.document.form1.field1.value
document.mainForm.field2.value = document.layer2.document.form2.field2.value
}
if (ie4) {
document.mainForm.field1.value = document.form1.field1.value
document.mainForm.field2.value = document.form2.field2.value
}
document.mainForm.submit()
}
我做了一个简单的演示, 一个实际的应用. 一个可以用做feedback的含有6个元素的表单. 同时我也写了一段简单的Perl Scripts来反馈HTML表单所发送的内容.
范例1:
www.dansteinman.com/dynduo/examples/forms1.html不同的元素在不同的层中, 然后一段javascript "粘合" 分散的数据. 只是用来确定这段javascript和perl工作正常.
范例2:
www.dansteinman.com/dynduo/examples/forms2.htmlform分散在不同的层中, 你可以按需要隐藏或者显示应用到的层. 当你完成最后一个问题后submit所有有效数据.
Perl 源文件:
www.dansteinman.com/dynduo/examples/forms-dhtml.txt---------------------------------------------------------------
5DMedia 版权所有, 转载请注明出处!