表单Form的submit事件不响应

2016-02-19 12:49 30 1 收藏

图老师小编精心整理的表单Form的submit事件不响应希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - Web开发 】


一、问题描述
当用JS调用form的方法submit直接提交form的时候,submit事件不响应。为什么?知道的请回复。类比一下,我用input.select()做了测试,却能响应select事件。这个原因先放一边,我们看看先怎么把眼下的问题解决了。
不响应事件的代码示例:
form id="form1" action="https://www.tulaoshi.com"/form
script type="text/javascript"
var form = document.getElementById('form1');
form.onsubmit = function() {
alert(1);
};
form.submit();
/script
实际运行,不会有alert出来。
虽然用submit方法来提交表单有违Unobtrustive Javascript的原则,但有时候不得不用,比如做搜索提示(auto-complete)选中Item之后就需要用JS来提交搜索表单。
二、问题分析
既然本身不响应事件,那只有手工触发这些事件了,确定手工触发方案之前先回顾一下事件的注册方式:
原始的注册方式有两种,看代码示例:
form id="form1" action="https://www.tulaoshi.com" onsubmit="alert(1)"/formform id="form1" action="https://www.tulaoshi.com"/form
script type="text/javascript"
document.getElementById('form1').onsubmit = function() {
alert(1);
}
/script
这样的注册事件,会给form增加了一个方法onsubmit。所以,可以通过直接执行这个方法,等同于手工触发了事件。
看代码示例:
script type="text/javascript"
form.onsubmit();
/script
这样可以得到一个alert。
但是在如今先进的DOM2标准注册方式以及IE的注册方式attachEvent已经很常用。这些注册方式,onsubmit方法是不存在的,如果使用form.onsubmit()会直接报错。
三、解决方案
当然先进的注册方式本身也提供了手工触发事件的解决方案,只是要针对DOM2标准和IE写不同的程序,另外这个程序,对原始的注册方式也一样有效。请看代码示例:
script type="text/javascript"
//IE fire event
if (form.fireEvent) {
form.fireEvent('onsubmit');
form.submit();
//DOM2 fire event
} else if (document.createEvent) {
var ev = document.createEvent('HTMLEvents');
ev.initEvent('submit', false, true);
form.dispatchEvent(ev);
}
/script
四、代码总结
这里不再对各细节方法做说明,不熟悉的朋友请自行查阅相关资料。我们把整个代码串起来:
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"
html
head
meta http-equiv="Content-Type" content="text/html; charset=GBK"
titlesubmit/title
script type="text/javascript" src="http://k.kbcdn.com/js/yui/build/utilities/utilities.js"/script
/head
body
form id="form1" action="https://www.tulaoshi.com"/form
script type="text/javascript"
var form = document.getElementById('form1');
//YUI register event
YAHOO.util.Event.on('form1', 'submit', function() {
alert('yui');
});
//DOM0 register event
form.onsubmit = function() {
alert(1);
};
//DOM2 register event
if (form.addEventListener) {
form.addEventListener('submit', function() {
alert(2);
}, false);
//IE register event
} else if (form.attachEvent) {
form.attachEvent('onsubmit', function() {
alert(2);
});
}
//IE fire event
if (form.fireEvent) {
form.fireEvent('onsubmit');
form.submit();
//DOM2 fire event
} else if (document.createEvent) {
var ev = document.createEvent('HTMLEvents');
ev.initEvent('submit', false, true);
form.dispatchEvent(ev);
}
/script
/body
/html
整个跑下来有个小问题,FX下,不需要form.submit(),直接把表单给提交出去了,所以这句也省掉了,原因知道的请回复。
这个demo在IE6/IE7/FX下测试通过。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

来源:https://www.tulaoshi.com/n/20160219/1602052.html

延伸阅读
标签: Web开发
表单是实现动态网页的一种主要的外在形式。表单和表单域并不具有排版的能力,表单网页的制作最终还是要由表格组织起来。html表单是html页面与浏览器端实现交互的重要手段。利用表单可以收集客户端提交的有关信息。  在浏览网站时经常会遇到表单,它是网站实现互动功能的重要组成部分。无论网站使用的是那种形式的语言来实现网站的互动功...
标签: Java JAVA基础
一个完整的Java应用程序,通常至少要有一个应用程序的结束点。对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让程序自然运行到结束。 如:下列典型代码 package untitled14; /** * This application is ...
标签: flash教程
响应键盘的方法作为AS中的一个重要组成部分,在如今已经越来越广泛的使用,尤其是在 FLASH游戏制作中,如果缺少了响应键盘的方法,那是不可能的,而响应键盘的方法主要的四种,分别是: 1、利用按钮进行检测 2、利用KEY对象 3、利用键盘侦听的方法 4、利用影片剪辑的keyUp和keyDown事件来实现响应键盘 只有熟练掌握了这些方法,然后...
1、使用线程例子 package untitled1; import Javax.swing.*; import java.awt.event.*; import java.awt.*; import com.borland.jbcl.layout.*; /** * Title: * Description: * Copyright: Copyright (c) 2002 * Company: * @author *...
如何将win7电脑中不响应的程序一键关闭掉   如何将win7电脑中不响应的程序一键关闭掉下面,我们说说具体的操作! 1.首先,咱们返回到win7旗舰版的桌面位置,然后随意的找一个空白处点击鼠标右键,在出现的下滑菜单中选择新建-快捷方式。 2.之后便会弹出快捷方式的设置向导了,咱们在键入项目的位置这里点击浏览,然后将路径...

经验教程

674

收藏

29
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部