JQuery使用THIS作为.on [selector]

时间:2015-09-16 18:38:12

标签: php jquery this

您好下, 所以我有这个代码:

$(document).on('click', ".buttonSelectAllOpt", function () {
    alert(this.attr("id"));
});

和PHP:

$iii=1
while([...]){
echo "<span class=\"buttonSelectAllOpt\" id=\"buttonSelectAllOpt$iii\">Some text</span>";
$iii++;
}

我希望这是.buttonSelectAllOpt,但是 似乎这是指文件,而不是选择器。 你知道我能以某种方式调用选择器吗?

4 个答案:

答案 0 :(得分:2)

您的示例中的

this将引用被单击的.buttonSelectAllOpt元素,但是您需要将其包装在jQuery对象中以访问attr()方法。试试这个:

$(document).on('click', ".buttonSelectAllOpt", function () {
    alert($(this).attr("id"));
});

Example fiddle

答案 1 :(得分:1)

this将引用所选项目,因此请尝试选择实际元素:

$('.buttonSelectAllOpt').click(function () {
    alert($(this).attr("id"));
});

另请注意,.click.on('click')的首选简写。将事件附加到实际对象(而不是文档)也更快。

请参阅此JSFiddle

答案 2 :(得分:0)

使用this.id$(this).attr('id')。在事件处理程序内部,this是一个DOM元素,因此您可以直接访问其属性。如果要使用jQuery .attr()方法,则需要将其包装在jQuery对象中。

答案 3 :(得分:0)

这里有一个替代答案,因此您不需要在文档本身注册活动......

尝试创建这样的方法:

var initBtnHandler = function () {
    $('a.buttonSelectAllOpt').on('click', function() {
        alert($(this).attr('id'));
    });
}

然后,在完成AJAX之后,只需通过调用函数重新注册事件:

$.ajax({
    url: 'yourUrl',
    type: 'post',
    success: function () {
        // do something
    },
    complete: function() {
        initBtnHandler();
    }
});

现在,您的新项目将在事件处理程序中注册。