0

我正在尝试获取在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/

4

2 回答 2

0

您正在尝试在选择器中使用不需要的上下文。改变$('li *','div#contentWrapper')和。$('div#contentWrapper')_ $(event.target)_ $(e.target)一个工作小提琴在这里

$('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);
        }
    }
});
于 2013-03-26T03:11:27.580 回答
0

由于您对以下元素中的click事件感兴趣,因此事件注册必须是li#interfaceContainer$('#interfaceContainer').on('click','li',function(e){...});

然后要获取tagName,您需要使用可用的事件的实际来源,e.target因此您需要使用$(e.target).get(0)来获取单击的 dom 元素。

$('#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);
        }
    }
});

演示:小提琴

于 2013-03-26T03:18:57.030 回答