在课程项目上注册事件,并在单击时获取其属性

时间:2019-05-02 13:44:27

标签: javascript

我正尝试打开一个菜单,右键单击任何课程项目。

var menu = document.getElementById("menu")
function contextMenu(e, atr) {
    //some code
}
var document_item = document.getElementsByClassName("item");
for (var i = 0; i < document_item.length; i++) {
     var atr = document_item[i].getAttribute("inspect")
     document_item[i].addEventListener('contextmenu', function (e) {contextMenu(e, atr) })
}

使用相同的atr值(最后一次加载)调用每个事件

所以atr应该是带有class item的click div的属性

2 个答案:

答案 0 :(得分:1)

如果您喜欢这样做,则附加到事件侦听器的函数将始终具有var具有的当前值,因为在事件触发时循环已经结束,它将是最后一个值。您可以使用带有参数的IIFE(立即调用函数执行)“保存”该值:

var menu = document.getElementById("menu")
function contextMenu(e, atr) {
    //some code
}
var document_item = document.getElementsByClassName("item");
for (var i = 0; i < document_item.length; i++) {
     var atr = document_item[i].getAttribute("inspect")
     document_item[i].addEventListener('contextmenu', (function(_atr){ return function (e) {contextMenu(e, _atr) }; })(atr) )
}

正如皮特(Pete)所说,您还可以使用e.currentTarget在函数中获取属性的值

答案 1 :(得分:1)

您将其隐式包含在事件处理程序中。

import pandas as pd

d = {'name':['bob','john','sue'],'id':[545,689,143],'fte':[1,.5,.75]}
df = pd.DataFrame(d)
# list of columns I want to make upper case
cols = ['id','fte']
newColumns = {oldName: oldName.upper() for oldName in cols}
df.rename(columns=newColumns, inplace=True)
print(df)