我试图在用户点击元素时获取在li
内点击的元素的标记名称。 li
元素动态添加到HTML代码中。要做到这一点,我使用下面的代码,但它似乎没有工作。
$('li *','div#contentWrapper').on('click','#interfaceContainer #left #sortableTestComponents li',function(e){
e.stopPropagation();
var domEl = $(this).get(0);
alert(domEl.tagName);
if(!$(event.target).hasClass("deleteTestComp")){
var type = $(this).find('div.headerName').html();
var information = $(this).find('input[type=hidden]').val();
if(type == "CliSessionType"){
parseCliComponent(information);
}
else if(type == "DBSessionType"){
parseDbComponent(information);
}
else{
parseScreenComponent(information);
}
}
});
为什么我的代码不起作用?当用户点击元素时没有任何反应。
JSFiddle - http://jsfiddle.net/3FxQE/
答案 0 :(得分:0)
您正试图在选择器中使用您不需要的上下文。使用$('li *','div#contentWrapper')
更改$('div#contentWrapper')
,使用$(event.target)
更改$(e.target)
。工作小提琴是here
$('div#contentWrapper').on('click', '#interfaceContainer #left #sortableTestComponents li', function (e) {
e.stopPropagation();
var $this = $(this),
domEl = $this.get(0);
alert(domEl.tagName);
if (!$(e.target).hasClass("deleteTestComp")) {
var type = $this.find('div.headerName').html(),
information = $this.find('input[type=hidden]').val();
if (type == "CliSessionType") {
parseCliComponent(information);
} else if (type == "DBSessionType") {
parseDbComponent(information);
} else {
parseScreenComponent(information);
}
}
});
答案 1 :(得分:0)
由于您对click
下li
元素中的#interfaceContainer
个事件感兴趣,因此事件注册必须为$('#interfaceContainer').on('click','li',function(e){...});
然后要获取tagName
,您需要使用e.target
中提供的事件的实际来源,因此您需要使用$(e.target).get(0)
来获取点击的dom元素。< / p>
$('#interfaceContainer').on('click','li',function(e){
e.stopPropagation();
var domEl = $(e.target).get(0);
alert(domEl.tagName);
if(!$(event.target).hasClass("deleteTestComp")){
var type = $(this).find('div.headerName').html();
var information = $(this).find('input[type=hidden]').val();
if(type == "CliSessionType"){
parseCliComponent(information);
}
else if(type == "DBSessionType"){
parseDbComponent(information);
}
else{
parseScreenComponent(information);
}
}
});
演示:Fiddle