2017-03-26 16 views

回答

2

嘗試如下。

var lis = document.getElementsByTagName('li'); 
 

 
for(var i = 0; i < lis.length; i++) { 
 
    (function(i) { 
 
    lis[i].addEventListener('click', function() { 
 
     alert(this.dataset.cid); 
 
    }, false); 
 
    })(i); 
 
}
<ul> 
 
    <li data-cid="1">1</li> 
 
    <li data-cid="2">2</li> 
 
    <li data-cid="3">3</li> 
 
    <li data-cid="4">4</li> 
 
    <li data-cid="5">5</li> 
 
</ul>

+0

這解決了一切。謝謝我的印度朋友。獲得最佳答案批准。 – WayneXMayersX

+0

你不需要那個IIFE。只有在函數中引用'i'時纔有用。這裏 - https://jsfiddle.net/20u46bgh/ - 代碼工作沒有它。 –

+0

小提琴不起作用。 – Harish

0

您可以使用document.querySelectorAll("li"),for..of loop迭代li元素,設置事件監聽器; element.dataset得到data-*屬性值

for (let li of document.querySelectorAll("li")) { 
    li.addEventListener("click", function() { 
     let justify = this.dataset.cid; 
    }) 
} 

或者

var li = [].slice.call(document.querySelectorAll("li")); 

li.forEach(function(el) { 
    el.addEventListener("click", function() { 
     var justify = this.dataset.cid; 
    }) 
}) 
+1

僅供參考:這將不適用於所有瀏覽器 – epascarello

+0

什麼是'lI' ...? '沒有定義。' – WayneXMayersX

+0

@epascarello你在引用.dataset嗎? – guest271314

0

這更像是與jQuery發生。

它將單個事件綁定到窗口,並檢查事件目標是什麼,如果它發現匹配,它將觸發回調,並將上下文設置爲clicked元素。

const $ = function(selector) { 
 
    const listeners = {} 
 
    const bindListener = function(event) { 
 
    listeners[event] = [] 
 
    window.addEventListener(event, function (e) { 
 
     // iterate through the subscribed events to find any matching selectors 
 
     const matches = listeners[event].filter(x => e.target.matches(x.selector)) 
 
     if (matches) { 
 
     matches.forEach(x => x.cb.call(e.target, e)) 
 
     } 
 
    }) 
 
    } 
 
    // bind a single event listener to the window for each event type 
 
    bindListener('click') 
 
    bindListener('mouseover') 
 
    // return your api 
 
    return { 
 
    on(event, cb) { 
 
     listeners[event].push({ selector, cb }) 
 
    }, 
 
    off(event, cb) { 
 
     listeners = listeners[event].filter(x => x.cb !== cb) 
 
    } 
 
    } 
 
} 
 

 

 
$('li').on('click', function(e){ 
 
    console.log(this.dataset.cid) 
 
}) 
 

 
$('li:first-of-type').on('mouseover', function (e) { 
 
    console.log('mouseover first li', this.dataset.cid) 
 
}) 
 

 
$('li:last-of-type').on('click', function (e) { 
 
    console.log('clicked last li', this.dataset.cid) 
 
})
<ul> 
 
    <li data-cid="foo">foo</li> 
 
    <li data-cid="bar">bar</li> 
 
    <li data-cid="baz">baz</li> 
 
</ul>

相關問題