最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

元素綁定click點擊事件方法

 更新時間:2015年06月08日 16:37:45   投稿:hebedich  
當點擊元素時,會發(fā)生 click 事件。當鼠標指針停留在元素上方,然后按下并松開鼠標左鍵時,就會發(fā)生一次 click。click() 方法觸發(fā) click 事件,或規(guī)定當發(fā)生 click 事件時運行的函數(shù)。

最簡單的莫過于使用click方法:

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

所有瀏覽器都彈出了1。但是如果把input換成div呢?

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

這次Safari/Chrome中沒有彈出2。即不是所有瀏覽器中的所有元素都支持click方法。事實上只有input/button元素在所有瀏覽器才具有click方法。
以上的事件都是直接添加在html屬性中的(內聯(lián)事件)。click方法能觸發(fā)使用el.onXXX/addEventListener/attachEvent添加的事件嗎?

<input id="btn1" type="button" value="BUTTON 1"/>
<input id="btn2" type="button" value="BUTTON 2"/>
<script>
 var addListener = window.addEventListener ?
   function(el, type, fn) { el.addEventListener(type, fn, false); } :
   function(el, type, fn) { el.attachEvent('on' + type, fn); };
 var btn1 = document.getElementById('btn1');
 var btn2 = document.getElementById('btn2');
 btn1.onclick = function(){
   alert(3);
 };
 addListener(btn2, 'click', function() {alert(4)});
 btn1.click();
 btn2.click();
</script>

所有瀏覽器都依次彈出了3,4。說明支持click方法的元素,無論使用內聯(lián)方式還是el.onXX又或addEventListener/attachEvent添加事件都能觸發(fā)。

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

<input id="btn1" type="button" value="BUTTON 1" onclick="alert(1)"/>
<input id="btn2" type="button" value="BUTTON 2" onclick="alert(2)"/>
<div id="d1" style="background:gold;width:50px;height:50px;" onclick="alert(3)"></div>
<script>
 function dispatch(el, type){
   try{
     var evt = document.createEvent('Event');
     evt.initEvent(type,true,true);
     el.dispatchEvent(evt);
   }catch(e){alert(e)};
 }
 var btn1 = document.getElementById('btn1');
 var btn2 = document.getElementById('btn2');  
 var d1 = document.getElementById('d1');
 dispatch(btn1, 'click');
 dispatch(btn2, 'click');
 dispatch(d1, 'click');
</script>

依次彈出了1,2,3。換成其它事件添加方式亦可觸發(fā)。IE中還有個fireEvent去主動觸發(fā)事件,當然如果是點擊事件使用click更好。非點擊事件則只能通過fireEvent去觸發(fā)了。

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

function triggerClick( el ) {
 var nodeName = el.nodeName,
   safari_chrome = /webkit/.test(navigator.userAgent.toLowerCase());
 if(safari_chrome && (nodeName != 'INPUT' || nodeName != 'BUTTON')) {
   try{
     var evt = document.createEvent('Event');
     evt.initEvent('click',true,true);
     el.dispatchEvent(evt);
   }catch(e){alert(e)};
 }else{
   el.click();
 }
}

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

function triggerClick( el ) {
 if(el.click) {
   el.click();
 }else{
   try{
     var evt = document.createEvent('Event');
     evt.initEvent('click',true,true);
     el.dispatchEvent(evt);
   }catch(e){alert(e)};    
 }
}

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

以上所述就是本文的全部內容了,希望大家能夠喜歡

相關文章

  • 淺談javascript中replace()方法

    淺談javascript中replace()方法

    這篇文章主要介紹了淺談javascript中replace()方法,replace函數(shù)方法是返回根據(jù)正則表達式進行文字替換后的字符串的復制,需要的朋友可以參考下
    2015-11-11
  • JavaScript 最佳實踐:幫你提升代碼質量

    JavaScript 最佳實踐:幫你提升代碼質量

    在本篇教程中,我將指出一些重要的 JavaScript 最佳實踐,讓你不必去用另外一種艱難的方式來了解它們。準備好去升級你的代碼吧
    2016-12-12
  • 如何使用webpack5+TypeScript+npm發(fā)布組件庫

    如何使用webpack5+TypeScript+npm發(fā)布組件庫

    這篇文章主要介紹了如何使用webpack5+TypeScript+npm發(fā)布組件庫,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • JavaScript字符串轉數(shù)字的5種方法及遇到的坑

    JavaScript字符串轉數(shù)字的5種方法及遇到的坑

    JavaScript是一個神奇的語言,字符串轉數(shù)字有5種方法,各有各的坑法!接下來通過本文給大家介紹JavaScript字符串轉數(shù)字的5種方法及其陷阱,感興趣的朋友一起看看吧
    2018-07-07
  • 深度解析JavaScript對象繼承

    深度解析JavaScript對象繼承

    JavaScript中的對象繼承是構建靈活、可維護代碼的關鍵部分,本文主要介紹了深度解析JavaScript對象繼承,包括原型鏈繼承、構造函數(shù)繼承、組合繼承等,感興趣的可以了解一下
    2024-01-01
  • 響應式表格之固定表頭的簡單實現(xiàn)

    響應式表格之固定表頭的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄憫奖砀裰潭ū眍^的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • JS實現(xiàn)的簡單下拉框聯(lián)動功能示例

    JS實現(xiàn)的簡單下拉框聯(lián)動功能示例

    這篇文章主要介紹了JS實現(xiàn)的簡單下拉框聯(lián)動功能,涉及javascript事件響應及頁面元素屬性動態(tài)修改相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • 根據(jù)經(jīng)緯度計算地球上兩點之間的距離js實現(xiàn)代碼

    根據(jù)經(jīng)緯度計算地球上兩點之間的距離js實現(xiàn)代碼

    最近用到了根據(jù)經(jīng)緯度計算地球表面兩點間距離的公式,然后就用JS實現(xiàn)了一下,根據(jù)地球是一個光滑的球面以及并不是一個真正的圓球體,而是橢球延伸出兩種方法,感興趣的你可以參考下
    2013-03-03
  • li隔行換色效果代碼升級版

    li隔行換色效果代碼升級版

    增加了對同一ID內的多個子容器中的tag(標簽)分別做隔行處理。div+css布局下,也可以控制了
    2008-05-05
  • js數(shù)組去重的常用方法總結

    js數(shù)組去重的常用方法總結

    本篇文章主要是對js數(shù)組去重的三種常用方法進行了總結介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01

最新評論

五寨县| 忻城县| 高碑店市| 辽中县| 阿图什市| 青冈县| 凤阳县| 西城区| 黑龙江省| 顺义区| 邢台市| 石景山区| 岗巴县| 且末县| 赣榆县| 长春市| 措美县| 孟州市| 清苑县| 十堰市| 中宁县| 巧家县| 星座| 凤凰县| 定结县| 济源市| 南通市| 甘谷县| 托克逊县| 合山市| 深水埗区| 新丰县| 尚义县| 勃利县| 永德县| 普洱| 虞城县| 白朗县| 盐池县| 广平县| 茶陵县|