js模擬點(diǎn)擊以提交表單為例兼容主流瀏覽器
更新時(shí)間:2013年11月29日 16:11:03 作者:
我們會(huì)常常用到JS的模事件,比如說(shuō)點(diǎn)擊事件,舉個(gè)簡(jiǎn)單的例子,點(diǎn)擊表單外的“提交”按鈕來(lái)提交表單,下面為大家介紹下具體的實(shí)現(xiàn)
在實(shí)際的應(yīng)用開(kāi)發(fā)中,我們會(huì)常常用到JS的模事件,但有時(shí)會(huì)遇到一些問(wèn)題,比如說(shuō)點(diǎn)擊事件,舉個(gè)簡(jiǎn)單的例子,點(diǎn)擊表單外的“提交”按鈕來(lái)提交表單。上代碼吧。
Html:
<h3>請(qǐng)單擊“提交”,測(cè)試提交按鈕的單擊事件也被觸發(fā)了。</h3>
<button id="btn">提交</button>
<form action="#" method="get" id="form">
<input type="text" name="site" value="www.woiweb.net" readonly/>
<input id="subbtn" type="submit" value="先別點(diǎn)擊此按鈕提交" onclick="alert('我已經(jīng)提交了');"/>
</form>
Javscript:
<script type="text/javascript">
var sub = document.getElementById("subbtn");
var btn = document.getElementById("btn");
//通用方法
btn.onclick = function() {
sub.click();
}
</script>
經(jīng)過(guò)測(cè)試,IE,F(xiàn)F,Chrome,Opera,Safari都沒(méi)有問(wèn)題,均可正常提交表單。
但在實(shí)際的設(shè)計(jì)中,為了讓提交按鈕更好看,buildder經(jīng)常把它們用a標(biāo)簽來(lái)處理,加個(gè)背景圖片來(lái)模擬按鈕,我們?nèi)匀挥蒙厦娴乃悸穪?lái)嘗試,增加一個(gè)a標(biāo)簽,讓它來(lái)提交表單,我們僅修改html。
Html:
<h3>請(qǐng)單擊“提交”,測(cè)試提交按鈕的單擊事件也被觸發(fā)了。</h3>
<button id="btn">提交</button>
<form action="#" method="get" id="form">
<input type="text" name="site" value="www.woiweb.net" readonly/>
<!--<input id="subbtn" type="submit" value="先別點(diǎn)擊此按鈕提交" onclick="alert('我已經(jīng)提交了');"/> -->
<a id="subbtn" href="javascript:;" onclick="alert('在此調(diào)用提交表單的方法')">模擬提交按鈕</a>
</form>
Javascript:
<script type="text/javascript">
var sub = document.getElementById("subbtn");
var btn = document.getElementById("btn");
//通用方法
btn.onclick = function() {
sub.click();
}
</script>
運(yùn)行后,問(wèn)題出現(xiàn)了,IE、FF、Opera均OK,但Chrome和Safari不能正常運(yùn)行,后來(lái)網(wǎng)上搜索了下,發(fā)現(xiàn)a標(biāo)簽并不是和按鈕一樣有onclick()事件的,解決辦法是針對(duì) IE 和 FF編寫(xiě)不同的邏輯,JS代碼如下:
javascript:
<script type="text/javascript">
var sub = document.getElementById("subbtn");
var btn = document.getElementById("btn");
//通用方法
btn.onclick = function() {
//sub.click();
if (/msie/i.test(navigator.userAgent)) //IE
{
sub.fireEvent("onclick");
} else {
var e = document.createEvent('MouseEvent');
e.initEvent('click', false, false);
sub.dispatchEvent(e);
}
}
</script>
至此,問(wèn)題解決,雖然這個(gè)問(wèn)題很簡(jiǎn)單,但很容易被大家忽略,貼出來(lái)和大家一起分享。
語(yǔ)法:
createEvent(eventType)
參數(shù) 描述
eventType 想獲取的 Event 對(duì)象的事件模塊名。關(guān)于有效的事件類(lèi)型列表,請(qǐng)參閱”說(shuō)明”部分。
返回值
返回新創(chuàng)建的 Event 對(duì)象,具有指定的類(lèi)型。
拋出
如果實(shí)現(xiàn)支持需要的事件類(lèi)型,該方法將拋出代碼為 NOT_SUPPORTED_ERR 的 DOMException 異常。
說(shuō)明
該方法將創(chuàng)建一種新的事件類(lèi)型,該類(lèi)型由參數(shù) eventType 指定。注意,該參數(shù)的值不是要?jiǎng)?chuàng)建的事件接口的名稱(chēng),而是定義那個(gè)接口的 DOM 模塊的名稱(chēng)。
下表列出了 eventType 的合法值和每個(gè)值創(chuàng)建的事件接口:
參數(shù) 事件接口 初始化方法
HTMLEvents HTMLEvent iniEvent()
MouseEvents MouseEvent iniMouseEvent()
UIEvents UIEvent iniUIEvent()
用該方法創(chuàng)建了 Event 對(duì)象以后,必須用上表中所示的初始化方法初始化對(duì)象。關(guān)于初始化方法的詳細(xì)信息,請(qǐng)參閱 Event 對(duì)象參考。
該方法實(shí)際上不是由 Document 接口定義的,而是由 DocumentEvent 接口定義的。如果一個(gè)實(shí)現(xiàn)支持 Event 模塊,那么 Document 對(duì)象就會(huì)實(shí)現(xiàn) DocumentEvent 接口并支持該方法。
Html:
復(fù)制代碼 代碼如下:
<h3>請(qǐng)單擊“提交”,測(cè)試提交按鈕的單擊事件也被觸發(fā)了。</h3>
<button id="btn">提交</button>
<form action="#" method="get" id="form">
<input type="text" name="site" value="www.woiweb.net" readonly/>
<input id="subbtn" type="submit" value="先別點(diǎn)擊此按鈕提交" onclick="alert('我已經(jīng)提交了');"/>
</form>
Javscript:
復(fù)制代碼 代碼如下:
<script type="text/javascript">
var sub = document.getElementById("subbtn");
var btn = document.getElementById("btn");
//通用方法
btn.onclick = function() {
sub.click();
}
</script>
經(jīng)過(guò)測(cè)試,IE,F(xiàn)F,Chrome,Opera,Safari都沒(méi)有問(wèn)題,均可正常提交表單。
但在實(shí)際的設(shè)計(jì)中,為了讓提交按鈕更好看,buildder經(jīng)常把它們用a標(biāo)簽來(lái)處理,加個(gè)背景圖片來(lái)模擬按鈕,我們?nèi)匀挥蒙厦娴乃悸穪?lái)嘗試,增加一個(gè)a標(biāo)簽,讓它來(lái)提交表單,我們僅修改html。
Html:
復(fù)制代碼 代碼如下:
<h3>請(qǐng)單擊“提交”,測(cè)試提交按鈕的單擊事件也被觸發(fā)了。</h3>
<button id="btn">提交</button>
<form action="#" method="get" id="form">
<input type="text" name="site" value="www.woiweb.net" readonly/>
<!--<input id="subbtn" type="submit" value="先別點(diǎn)擊此按鈕提交" onclick="alert('我已經(jīng)提交了');"/> -->
<a id="subbtn" href="javascript:;" onclick="alert('在此調(diào)用提交表單的方法')">模擬提交按鈕</a>
</form>
Javascript:
復(fù)制代碼 代碼如下:
<script type="text/javascript">
var sub = document.getElementById("subbtn");
var btn = document.getElementById("btn");
//通用方法
btn.onclick = function() {
sub.click();
}
</script>
運(yùn)行后,問(wèn)題出現(xiàn)了,IE、FF、Opera均OK,但Chrome和Safari不能正常運(yùn)行,后來(lái)網(wǎng)上搜索了下,發(fā)現(xiàn)a標(biāo)簽并不是和按鈕一樣有onclick()事件的,解決辦法是針對(duì) IE 和 FF編寫(xiě)不同的邏輯,JS代碼如下:
javascript:
復(fù)制代碼 代碼如下:
<script type="text/javascript">
var sub = document.getElementById("subbtn");
var btn = document.getElementById("btn");
//通用方法
btn.onclick = function() {
//sub.click();
if (/msie/i.test(navigator.userAgent)) //IE
{
sub.fireEvent("onclick");
} else {
var e = document.createEvent('MouseEvent');
e.initEvent('click', false, false);
sub.dispatchEvent(e);
}
}
</script>
至此,問(wèn)題解決,雖然這個(gè)問(wèn)題很簡(jiǎn)單,但很容易被大家忽略,貼出來(lái)和大家一起分享。
語(yǔ)法:
createEvent(eventType)
參數(shù) 描述
eventType 想獲取的 Event 對(duì)象的事件模塊名。關(guān)于有效的事件類(lèi)型列表,請(qǐng)參閱”說(shuō)明”部分。
返回值
返回新創(chuàng)建的 Event 對(duì)象,具有指定的類(lèi)型。
拋出
如果實(shí)現(xiàn)支持需要的事件類(lèi)型,該方法將拋出代碼為 NOT_SUPPORTED_ERR 的 DOMException 異常。
說(shuō)明
該方法將創(chuàng)建一種新的事件類(lèi)型,該類(lèi)型由參數(shù) eventType 指定。注意,該參數(shù)的值不是要?jiǎng)?chuàng)建的事件接口的名稱(chēng),而是定義那個(gè)接口的 DOM 模塊的名稱(chēng)。
下表列出了 eventType 的合法值和每個(gè)值創(chuàng)建的事件接口:
參數(shù) 事件接口 初始化方法
HTMLEvents HTMLEvent iniEvent()
MouseEvents MouseEvent iniMouseEvent()
UIEvents UIEvent iniUIEvent()
用該方法創(chuàng)建了 Event 對(duì)象以后,必須用上表中所示的初始化方法初始化對(duì)象。關(guān)于初始化方法的詳細(xì)信息,請(qǐng)參閱 Event 對(duì)象參考。
該方法實(shí)際上不是由 Document 接口定義的,而是由 DocumentEvent 接口定義的。如果一個(gè)實(shí)現(xiàn)支持 Event 模塊,那么 Document 對(duì)象就會(huì)實(shí)現(xiàn) DocumentEvent 接口并支持該方法。
您可能感興趣的文章:
- JS模擬的Map類(lèi)實(shí)現(xiàn)方法
- js模擬點(diǎn)擊事件實(shí)現(xiàn)代碼
- js模擬滾動(dòng)條(橫向豎向)
- JS模擬多線(xiàn)程
- javascript用DIV模擬彈出窗口_窗體滾動(dòng)跟隨
- javascript模擬滾動(dòng)條實(shí)現(xiàn)代碼
- JS組件Bootstrap實(shí)現(xiàn)下拉菜單效果代碼
- 基于AngularJs + Bootstrap + AngularStrap相結(jié)合實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)代碼
- JS組件Bootstrap Table使用實(shí)例分享
- 三級(jí)下拉菜單的js實(shí)現(xiàn)代碼
- JS實(shí)多級(jí)聯(lián)動(dòng)下拉菜單類(lèi),簡(jiǎn)單實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)菜單!
- Js點(diǎn)擊彈出下拉菜單效果實(shí)例
- JS模擬bootstrap下拉菜單效果實(shí)例
相關(guān)文章
JS變量中有var定義和無(wú)var定義的區(qū)別以及es6中l(wèi)et命令和const命令
這篇文章主要介紹了JS變量中有var定義和無(wú)var定義的區(qū)別以及es6中l(wèi)et命令和const命令,需要的朋友可以參考下2017-02-02
Javascript Request獲取請(qǐng)求參數(shù)如何實(shí)現(xiàn)
使用Javascript Request獲取參數(shù)的時(shí)候總是提示出錯(cuò),本文為此問(wèn)題提供詳細(xì)的解決方案,需要了解的朋友可以參考下2012-11-11
JavaScript導(dǎo)出CSV文件不完整的問(wèn)題解決方法
在JavaScript中處理CSV文件時(shí),需要特別注意一些特殊字符,例如逗號(hào)、雙引號(hào)、換行符等,這些字符可能會(huì)影響CSV文件的解析,導(dǎo)致數(shù)據(jù)錯(cuò)亂,所以本文給大家介紹了如何解決JavaScript導(dǎo)出CSV文件不完整的問(wèn)題,需要的朋友可以參考下2024-06-06
JavaScript中push(),join() 函數(shù) 實(shí)例詳解
本文通過(guò)實(shí)例給大家介紹了JavaScript中push(),join() 的知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
細(xì)說(shuō)webpack源碼之compile流程-rules參數(shù)處理技巧(1)
webpack作為一種流行的打包工具被廣泛應(yīng)用在web項(xiàng)目的前端工程化構(gòu)建中。下面通過(guò)本文給大家介紹webpack源碼之compile流程-rules參數(shù)處理技巧,感興趣的朋友一起看看吧2017-12-12
全面解讀TypeScript和JavaScript的區(qū)別
TypeScript和JavaScript是目前項(xiàng)目開(kāi)發(fā)中較為流行的兩種腳本語(yǔ)言, TypeScript是JavaScript的一個(gè)超集,JavaScript是一種輕量級(jí)的解釋性腳本語(yǔ)言,本文主要介紹了兩者區(qū)別,感興趣的可以了解一下2023-09-09

