九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
模擬元素點(diǎn)擊的幾種方式

最簡(jiǎn)單的莫過于使用click方法

1<input id="btn" type="button" value="BUTTON" onclick="alert(1)"/>
2<script>
3    var btn = document.getElementById('btn');
4    btn.click();
5</script>

所有瀏覽器都彈出了1。

把input換成div呢

1<div id="d1" style="background:gold;width:50px;height:50px;" onclick="alert(2)"></div>
2<script>
3    var d1 = document.getElementById('d1');
4    d1.click();
5</script>

這次Safari/Chrome中沒有彈出2。

不是所有瀏覽器中的所有元素都支持click方法。事實(shí)上只有input/button元素在所有瀏覽器才具有click方法。

以上的事件都是直接添加在html屬性中的(內(nèi)聯(lián)事件)。click方法能觸發(fā)使用el.onXXX/addEventListener/attachEvent添加的事件嗎?

01<input id="btn1" type="button" value="BUTTON 1"/>
02<input id="btn2" type="button" value="BUTTON 2"/>
03<script>
04    var addListener = window.addEventListener ?
05        function(el, type, fn) { el.addEventListener(type, fn, false); } :
06        function(el, type, fn) { el.attachEvent('on' + type, fn); };
07    var btn1 = document.getElementById('btn1');
08    var btn2 = document.getElementById('btn2');
09    btn1.onclick = function(){
10        alert(3);
11    };
12    addListener(btn2, 'click', function() {alert(4)});
13    btn1.click();
14    btn2.click();
15 
16</script>

所有瀏覽器都依次彈出了3,4。

說明支持click方法的元素,無論使用內(nèi)聯(lián)方式還是el.onXX又或addEventListener/attachEvent添加事件都能觸發(fā)。

click方法已經(jīng)寫入了HTML5草案,如果Safari/Chrome完成對(duì)剩下的元素的實(shí)現(xiàn)(非input/button)。那么模擬點(diǎn)擊將十分簡(jiǎn)單,直接調(diào)用click方法。Firefox也是剛剛在版本5中實(shí)現(xiàn)對(duì)非input/button元素的click方法實(shí)現(xiàn),這點(diǎn)Safari/Chrome有些落后了。

既然Safari/Chrome中click不可用, 我們就用dispatchEvent來實(shí)現(xiàn)了。

01<input id="btn1" type="button" value="BUTTON 1" onclick="alert(1)"/>
02<input id="btn2" type="button" value="BUTTON 2" onclick="alert(2)"/>
03<div id="d1" style="background:gold;width:50px;height:50px;" onclick="alert(3)"></div>
04<script>
05    function dispatch(el, type){
06        try{
07            var evt = document.createEvent('Event');
08            evt.initEvent(type,true,true);
09            el.dispatchEvent(evt);
10        }catch(e){alert(e)};
11    }
12    var btn1 = document.getElementById('btn1');
13    var btn2 = document.getElementById('btn2');    
14    var d1 = document.getElementById('d1');
15    dispatch(btn1, 'click');
16    dispatch(btn2, 'click');
17    dispatch(d1, 'click');
18 
19</script>

依次彈出了1,2,3。換成其它事件添加方式亦可觸發(fā)。

IE中還有個(gè)fireEvent去主動(dòng)觸發(fā)事件,當(dāng)然如果是點(diǎn)擊事件使用click更好。非點(diǎn)擊事件則只能通過fireEvent去觸發(fā)了。

最后給出我的triggerClick方法,實(shí)現(xiàn)方式判斷瀏覽器,判斷nodeName。依據(jù)是Safari/Chrome不支持非input/button元素的click方法。

01function triggerClick( el ) {
02    var nodeName = el.nodeName,
03        safari_chrome = /webkit/.test(navigator.userAgent.toLowerCase());
04    if(safari_chrome && (nodeName != 'INPUT' || nodeName != 'BUTTON')) {
05        try{
06            var evt = document.createEvent('Event');
07            evt.initEvent('click',true,true);
08            el.dispatchEvent(evt);
09        }catch(e){alert(e)};
10    }else{
11        el.click();
12    }
13}

上面的實(shí)現(xiàn)方式讓你能明白瀏覽器的差異,但實(shí)現(xiàn)其實(shí)有點(diǎn)羅嗦。直接判斷元素是否具有click方法即可,Safari/Chrome中非input/button元素沒有click方法,返回undefined。

01function triggerClick( el ) {
02    if(el.click) {
03        el.click();
04    }else{
05        try{
06            var evt = document.createEvent('Event');
07            evt.initEvent('click',true,true);
08            el.dispatchEvent(evt);
09        }catch(e){alert(e)};       
10    }
11}

特性判斷也比瀏覽器判斷有更好的前瞻性,比如Safari/Chrome在后續(xù)版本中實(shí)現(xiàn)了非input/button元素的click方法,那么特性判斷的函數(shù)仍然可以向下兼容。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JS:attachEvent和addEventListener 使用方法
【原】javascript事件流
理解Javascript中的事件綁定與事件委托
用Ueditor為Asp.net mvc打造可視化HTML編輯器
JS觸發(fā)Click操作以及獲得事件源
Delphi中Chrome Chromium、Cef3學(xué)習(xí)筆記(四)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服