表单元素的submit ()⽅法和onsubmit 事件
表单元素拥有submit ⽅法,同时也具有onsubmit 事件句柄,⽤于监听表单提交。可以使⽤elemForm.submit();⽅法触发表单提交。
blur事件1、表单元素中出现了name="submit"的元素
这种情况下elemForm.submit();将不会触发表单提交,因为表单原始的submit ⽅法将会被覆盖(formElem.submit 就是对该元素的引⽤)。
2、elemForm.submit();不会触发表单的onsubmit 事件
没有为什么,标准中就是这么规定的。
与此有些类似的是onfocus 、onblur 和focus()、blur()之间的关系却不同,调⽤elem.blur()或elem.focus()却会触发onblur 和onfocus 事件。
这些为我们提供了⼀个思路,在设计⼀些UI 组件时,需要考虑⼀些事件在内部调⽤时是否要触发相关事件。 例如Dialog 组件,它具有onopen 事件,同时返回的对象也会有open()⽅法,我们这时就必须考虑下open()⽅法是否需要触发onopen()事件。
3、动态创建表单时遇到的问题
经常使⽤的⼀种⽅法如下,他会在表单submit 前调⽤,根据validate()函数的返回值决定是否需要提交表单。
然⽽,如果要动态地为⼀个表单添加验证,即HTML 代码中没有写onsubmit ,⽽在页⾯加载后⽤javascript 给这个form 加⼀个handler ,问题就 来了。假设我们已经得到了表单的DOM 节点,保存在变量elemForm 中,⼀般这样来给它加上handler :
问题就出现了:在Firefox 和Chrome 中"return false;"是不能阻⽌表单的提交的(在IE 中可以),这就是为什么⼤家在onsubmit 属性中要写"return check()",⽽不仅仅是"check()"。
原因是什么呢?请看,其中明确地写着,"Object EventListener: This is an ECMAScript function reference. This method has no return value. The parameter is a Event object",意思就是event listener 没有返回值。 换⼀种理解,addEventListener 可以为元素绑定多个监听函数,某⼀个事件监听函数的返回值,不可以作为整个事件的返回值。可以使⽤下⾯的⽅法解决
其实⼀切的根本都因为IE 不⽀持DOM Level 2。1. <form  onsubmit ="return validate();"></form>  1. var  check = function () {  2.    if  ('OK') {  3.        return  true ;  4.    } else  {  5.        return  false ;  6.    }
  7. };  8. if  (elemForm.addEventListener) {  9.    elemForm.addEventListener("submit", check, false );  10. } else  if  (elemForm.attachEvent) {  11.    elemForm.attachEvent("onsubmit", check);  12. }
1. function  check(ev) {
2.    ev = ev || window.event; // Event 对象
3.    if  (ev.preventDefault) { // 标准浏览器
4.            e.preventDefault();
5.    } else  { // IE 浏览器
6.        urnValue = false ;
7.    }
8. }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。