认真研究下HTML之id、name、form、submit
#起因
同事希望在提交之后关闭父窗口,但是,始终没有提交请求发出。他的代码大概如下:
// <form id='f' action=...
// <button onclick='fun()'>... fun(){
$('#f').submit();
window.parent.close();
}
运行结果是,“直接关闭,没有提交”。
在建议他用Ajax提交的同时,又好奇为什么会这样,于是测试了下,发现规律很简单:
form的submit动作是在所有动作之后执行的,类似于在Java中的finally中执行submit。
至于原因,猜测是因为同步submit之后,会直接跳转到返回的页面,不会再执行后续的动作 -- 为了保证后续动作的执行,js应该是有这种机制来保证submit在最后执行!
#验证
很简单,代码如下:
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>INDEX</title>
</head> <body> <form id='f1' name='f' action="">
<input id="k" name="username" type="text">
<button onclick="a()">GOGOGO</button>
</form> <script>
//我擦,只要有form.submit,那必须在所有动作之后完成! 类似finally
function a(){
$('#f1').submit(); $('#k').val('kkkkkkkkkk') //修改一下内容,看看是提交暂存,还是最后才提交
alert('xxx')
}
</script>
</body> </html>
form没有设置action,直接提交到本地址;没有设置method,默认GET;
这样,提交就能在地址栏看到提交的内容!
打开页面,随便输入点内容,然后点击提交,会①再弹出框,②再修改输入框内容,③最后才是提交!
此时,在地址栏就能看到提交的内容!
file:///C:/Users/Larry/Desktop/demo/index.html?name=kkkkkkkkkk
#延伸
验证了之后,就开始怀疑是否是jQuery独有的现象,于是使用document.forms[0].submit() 再验证了一番,结果相同,所以应该是js的机制。
好了,submit问题至此结束。但是,又对document.forms 发生了兴趣,想要知道是否能通过id来获取指定的form。
查找了一番,说是可以使用form的name来获取,即 document.forms['name'],需要给form指定name属性。测试可行。
测试的时候顺手又测试了下能否使用id,结果也是可行。
于是更好奇id和name的区别(惭愧,以前从没考虑过这个问题)。。。
#id VS name
简单的说,id就是唯一的身份证,不能重复(其实可以重复,只不过只会使用第一个)。
而name,则是form及其内部专用的,如果相同name的表单只有一个,那作用和id是一样的。只有在多个表单带有相同name的时候,name才和id不同。
最明显的例子:
<input type='checkbox' name='hobby' value='eat'>吃
<input type='checkbox' name='hobby' value='play'>玩
<input type='checkbox' name='hobby' value='sleep'>睡
上面这个时候,name才和id不同。
document.getElementById
document.getElementByName
#补充
alert(document.forms['f'].hobby) //name有多个的时候,返回这个name对应的dom对象列表! alert(document.forms['f'].username) //name只有一个的时候,返回这个name对应的dom对象!
认真研究下HTML之id、name、form、submit的更多相关文章
- k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建
更新 1.更新小伙伴 @大龄Giser 提出好点子:试试VS的插件扩展:VSIX.ItemProject等,将T4模板给制作插件,这里先记下,有懂的小伙伴可以自己先试试,我会在以后更新. 2.感谢小伙 ...
- 学习和研究下unity3d的四元数 Quaternion
学习和研究下unity3d的四元数 Quaternion 今天准备学习和研究下unity3d的四元数 Quaternion 四元数在电脑图形学中用于表示物体的旋转,在unity中由x,y,z,w 表示 ...
- select 下拉框 disabled 则 Form 获取不到值
select 下拉框 disabled 则 Form 获取不到值 有时候需要禁用 下拉框 , 但是表单又需要获取到 下拉框的值. 解决方案1: 使用文本框和隐藏域 来代替下拉框 disabled 解决 ...
- 研究下JavaScript中的Rest參数和參数默认值
研究下JavaScript中的Rest參数和參数默认值 本文将讨论使 JavaScript 函数更有表现力的两个特性:Rest 參数和參数默认值. Rest 參数 通常,我们须要创建一个可变參数的函数 ...
- 上传文件时用form.submit提交的时候在低版本的IE中报拒绝访问的错误
上传文件的时候,在IE7下总是传不了,但FireFox,IE11和Chrome下则可以上传.发现是form.submit();时出错了(“拒绝访问”). html代码为: <label oncl ...
- form.submit() not a function的元凶
今天晚上学习jquery form plugin时,在明白了该插件的用法时, (1)该插件是将form的HTTP请求 改为AJax请求. (2)支持像jQuery.ajax(options)一样 的o ...
- 文件上传时jquery.form.js中提示form.submit SCRIPT5: 拒绝访问
利用其它控件触发file的click事件来选择文件后,使用jquery.form.js中的submit方法提交时IE报错:form.submit SCRIPT5: 拒绝访问,其它浏览器正常, < ...
- js提交表单错误:document.form.submit() is not a function
今天在写JS时,遇上这么个错误:"document.form.submit() is not a function",经过一番搜索,最终找到了修复方法. 这个错误一般是由于表单&l ...
- form submit提交
form内控件参数自动添加到url后,而自定义的url参数则不能添加到url后 $('#fm').form('submit', { url: 'Data/Diary.ashx?dt=' + new D ...
随机推荐
- (原创)c++11改进我们的模式之改进单例模式
我会写关于c++11的一个系列的文章,会讲到如何使用c++11改进我们的程序,本次讲如何改进我们的模式,会讲到如何改进单例模式.观察者模式.访问者模式.工厂模式.命令模式等模式.通过c++11的改进, ...
- 隐藏windows任务栏中的窗口显示
在实际应用中遇到类似下列需要: 隐藏windows窗口,在windows任务栏中窗口不可见,但应用程序在后台运行. windows应用程序的窗口默认会在任务栏中添加一个可见的窗口项,方便用户操作和在不 ...
- pip升级Python程序包
列出当前安装的包: pip list 列出可升级的包: pip list --outdate 升级一个包: pip install --upgrade requests // mac,linux,un ...
- ubuntu下安装与卸载软件方法
http://www.cnblogs.com/JamyWong/archive/2009/11/19/1606442.html 1.通过deb包安装的情况:安装.deb包:代码:sudo dpkg - ...
- 【Python】打印object对象
print (object .__dict__) print (dir(object))
- python各类项目模块记录
看看下面这些项目,并试着用它们实现一些东西出来:• The Django Tutorial 试着用 Django Web Framework 创建一个 web 应用.• SciPy 如果你对科学,数学 ...
- 【WPF】使用CefSharp嵌入HTML网页
需求:WPF项目中要做用户的商铺主页,由于考虑到每个商家的主页布局各不相同,不能用XAML写死布局.最好的办法是WPF这边XAML写好一个容器,用户使用HTML可视化编辑器(比如这个)来准备好网页,输 ...
- C语言 · 数组排序去重
算法训练 数组排序去重 时间限制:1.0s 内存限制:512.0MB 问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 ...
- 远程log调试工具console.re
http://console.re/ https://github.com/kurdin/console-remote 前文提到在手机微信上调试代码很痛苦,看不到日志.为了看到日志,得把日志发到服务器 ...
- Hadoop与Spark之间的比较
Hadoop与Spark之间的比较 Hadoop框架的主要模块包括如下: Hadoop Common Hadoop分布式文件系统(HDFS) Hadoop YARN Hadoop MapReduce ...