0

我有一个属性 id="x" 的 div,我在 jQuery 中有以下代码:

$(document).ready(function()
{
    $('#x').click(function(){
        $(this).removeAttr('id');
         alert('something')
    });
});

现在,每当我单击 div 时,都会删除 id 属性并弹出消息。但是当我再次单击该元素时,仍然会弹出该消息。当属性第一次被单击时被删除时,怎么会发生这种情况?

4

3 回答 3

3

元素在 jquery 中保持实例化,并带有它的 id。
试试这个它工作正常:

$(document).on('click','#x',function(){
        $(this).removeAttr('id');
         alert('somethin');
    });

演示

于 2013-07-27T14:15:14.357 回答
3

您可以使用一个,这样这只发生一次

$('#x').one('click', function(){
    $(this).removeAttr('id');
     alert('something)
});

jQuery one();

但是使用事件委托可能会更好,这样每次点击时都会检查元素的ID,例如

$(document).on('click', '#x', function() {
    $(this).removeAttr('id');
    alert('something)
});

以下是有关为什么会发生这种情况的一些信息。

使用您的代码 jQuery 获取具有 id if 的元素,#然后添加事件侦听器,此时事件侦听器不会被告知在触发事件之前检查 id,因此事件将永远附加到该元素,而使用上面的例子,每次用户点击文档时,jQuery 都会检查 idevent.target是否匹配,然后触发回调。

于 2013-07-27T14:16:52.220 回答
2

因为事件绑定到文档准备好的元素上。删除该属性不会阻止已绑定的事件触发。$(this).off('click')如果那是您想要的,您将需要这样做。

于 2013-07-27T14:14:26.930 回答