表單元素的submit()方法和onsubmit事件應(yīng)用概述
表單元素?fù)碛衧ubmit方法,同時(shí)也具有onsubmit事件句柄,用于監(jiān)聽(tīng)表單提交??梢允褂胑lemForm.submit();方法觸發(fā)表單提交。
1、表單元素中出現(xiàn)了name="submit"的元素
這種情況下elemForm.submit();將不會(huì)觸發(fā)表單提交,因?yàn)楸韱卧嫉膕ubmit方法將會(huì)被覆蓋(formElem.submit就是對(duì)該元素的引用)。
2、elemForm.submit();不會(huì)觸發(fā)表單的onsubmit事件
沒(méi)有為什么,標(biāo)準(zhǔn)中就是這么規(guī)定的。
與此有些類(lèi)似的是onfocus、onblur和focus()、blur()之間的關(guān)系卻不同,調(diào)用elem.blur()或elem.focus()卻會(huì)觸發(fā)onblur和onfocus事件。
這些為我們提供了一個(gè)思路,在設(shè)計(jì)一些UI組件時(shí),需要考慮一些事件在內(nèi)部調(diào)用時(shí)是否要觸發(fā)相關(guān)事件。例如Dialog組件,它具有onopen事件,同時(shí)返回的對(duì)象也會(huì)有open()方法,我們這時(shí)就必須考慮下open()方法是否需要觸發(fā)onopen()事件。
3、動(dòng)態(tài)創(chuàng)建表單時(shí)遇到的問(wèn)題
經(jīng)常使用的一種方法如下,他會(huì)在表單submit前調(diào)用,根據(jù)validate()函數(shù)的返回值決定是否需要提交表單。
<form onsubmit="return validate();"></form>
然而,如果要?jiǎng)討B(tài)地為一個(gè)表單添加驗(yàn)證,即HTML代碼中沒(méi)有寫(xiě)onsubmit,而在頁(yè)面加載后用javascript給這個(gè)form加一個(gè)handler,問(wèn)題就 來(lái)了。假設(shè)我們已經(jīng)得到了表單的DOM節(jié)點(diǎn),保存在變量elemForm中,一般這樣來(lái)給它加上handler:
var check = function() {
if ('OK') {
return true;
} else {
return false;
}
};
if (elemForm.addEventListener) {
elemForm.addEventListener("submit", check, false);
} else if (elemForm.attachEvent) {
elemForm.attachEvent("onsubmit", check);
}
問(wèn)題就出現(xiàn)了:在Firefox和Chrome中"return false;"是不能阻止表單的提交的(在IE中可以),這就是為什么大家在onsubmit屬性中要寫(xiě)"return check()",而不僅僅是"check()"。
原因是什么呢?請(qǐng)看ECMAScript Language Binding,其中明確地寫(xiě)著,"Object EventListener: This is an ECMAScript function reference. This method has no return value. The parameter is a Event object",意思就是event listener沒(méi)有返回值。換一種理解,addEventListener可以為元素綁定多個(gè)監(jiān)聽(tīng)函數(shù),某一個(gè)事件監(jiān)聽(tīng)函數(shù)的返回值,不可以作為整個(gè)事件的返回值。可以使用下面的方法解決
function check(ev) {
ev = ev || window.event; // Event對(duì)象
if (ev.preventDefault) { // 標(biāo)準(zhǔn)瀏覽器
e.preventDefault();
} else { // IE瀏覽器
window.event.returnValue = false;
}
}
其實(shí)一切的根本都因?yàn)镮E不支持DOM Level 2。
相關(guān)文章
微信小程序自定義數(shù)據(jù)實(shí)現(xiàn)級(jí)聯(lián)省市區(qū)組件功能
這篇文章主要介紹了微信小程序自定義數(shù)據(jù)實(shí)現(xiàn)級(jí)聯(lián)省市區(qū)組件功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-03-03
關(guān)于cookie的初識(shí)和運(yùn)用(js和jq)
下面小編就為大家?guī)?lái)一篇關(guān)于cookie的初識(shí)和運(yùn)用(js和jq)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦2016-04-04
js設(shè)計(jì)模式中單例模式的簡(jiǎn)要說(shuō)明
這篇文章主要為大家介紹了js設(shè)計(jì)模式中單例模式的簡(jiǎn)要說(shuō)明,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01
TypeScript基礎(chǔ)class類(lèi)教程示例
這篇文章主要為大家介紹了TypeScript基礎(chǔ)class類(lèi)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
使用JavaScript 實(shí)現(xiàn)對(duì)象 勻速/變速運(yùn)動(dòng)的方法
本篇文章是對(duì)JavaScript中實(shí)現(xiàn)對(duì)象勻速/變速運(yùn)動(dòng)的方法進(jìn)行了詳細(xì)的介紹。需要的朋友參考下2013-05-05
HTML代碼中標(biāo)簽的全部屬性 中文注釋說(shuō)明
所有在IE環(huán)境下有效可用的對(duì)象屬性都在下面.學(xué)習(xí)HTML的朋友可以借鑒學(xué)習(xí),也可以拿去嚇人,2009-03-03
深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解
這篇文章主要介紹了深入理解JavaScript系列(19):求值策略(Evaluation strategy)詳解,本文講解了一般理論、按值傳遞、按引用傳遞、按共享傳遞(Call by sharing)、按共享傳遞是按值傳遞的特例等內(nèi)容,需要的朋友可以參考下2015-03-03

