Javascript Can';t使用新id访问元素

Javascript Can';t使用新id访问元素,javascript,jquery,Javascript,Jquery,我正在尝试使用一种新的安替比妥来接触elemet HTML 在script.js文件中: $('.element').attr("id", "activated"); script.js将id#activated添加到div中,但是.click()无法使用新id 有人能告诉我为什么吗 $(“#已激活”)在任何元素具有该id之前进行求值,因此它找不到任何元素,并且没有任何单击处理程序附加到任何元素 您可以使用事件委派来解决此问题。单击处理程序将立即附加到文档正文,但仅当目标元素与“#activa

我正在尝试使用一种新的安替比妥来接触elemet

HTML

在script.js文件中:

$('.element').attr("id", "activated");
script.js将id#activated添加到div中,但是.click()无法使用新id

有人能告诉我为什么吗

$(“#已激活”)
在任何元素具有该id之前进行求值,因此它找不到任何元素,并且没有任何单击处理程序附加到任何元素

您可以使用事件委派来解决此问题。单击处理程序将立即附加到文档正文,但仅当目标元素与“#activated”选择器匹配时,才会触发其回调:

$(document.body).on('click', '#activated', function() 
{
    alert(1);
});
$(“#已激活”)
在任何元素具有该id之前进行求值,因此它找不到任何元素,也没有将任何单击处理程序附加到任何元素

您可以使用事件委派来解决此问题。单击处理程序将立即附加到文档正文,但仅当目标元素与“#activated”选择器匹配时,才会触发其回调:

$(document.body).on('click', '#activated', function() 
{
    alert(1);
});
当执行行
$('#activated').click(function()
时,文档中没有ID为
activated
的元素,因此jQuery返回一个空集合,
click
方法以静默方式失败。您可以使用事件委派技术:

$(document).on('click', '#activated', function() 
或者在第一个事件处理程序中检查单击元素的id:

$('.element').on("click", function() 
{
    if ( this.id === 'activated' ) 
    {
       // ...
    } 
    else 
    {
       $.getScript('/script.js');
    }
}); 
当执行行
$('#activated').click(function()
时,文档中没有ID为
activated
的元素,因此jQuery返回一个空集合,
click
方法以静默方式失败。您可以使用事件委派技术:

$(document).on('click', '#activated', function() 
或者在第一个事件处理程序中检查单击元素的id:

$('.element').on("click", function() 
{
    if ( this.id === 'activated' ) 
    {
       // ...
    } 
    else 
    {
       $.getScript('/script.js');
    }
}); 

试试
$(文档)。在('click','#activated',function(){//do somthing here})
它可能会工作。告诉我它不会工作。

试试
$(文档)。在('click','#activated',function(){//do somthing here上。
它可能会工作。告诉我它不会工作。

那是因为你可能运行
$('activated')。在
$(文档)中单击(…
).ready(…
并且由于您动态插入激活的
id,它在单击
元素
div之前不在那里,这将在
$(文档)之后很久发生。ready(…
已执行。因此将找不到
$(“#激活”)
。@sanihutune,是的,脚本是在$(文档)中运行的.ready,但我删除了它,仍然存在相同的问题。这是因为您可能运行了
$(“#activated”)。单击
$(文档)中的(…
)。ready(…
)并动态插入
activated
id,直到您单击
元素
div后才会出现。ready(…
已执行。因此将找不到
$(“#已激活”)
。@SaniHuttunen,是的,脚本在$(文档)中运行。准备好了,但我删除了它,但仍然存在相同的问题。
单击
方法在幕后调用
上的
方法,因此实际上没有什么区别,如果你想委派事件,应该使用另一个版本的
方法。@undefined:现在呢?@undefined我有一个问题,我还没有找到答案即使经过尽可能多的研究,我也没有得到任何答案。如果你能帮助你获得良好的声誉,请回答。问题在这里-->请帮助
单击
方法在幕后调用
on
方法,因此,如果你想委派活动,另一个版本的
on方法。@undefined:现在呢?@undefined我有一个问题,即使经过尽可能多的研究,我也没有找到答案,如果你能帮助你获得良好的声誉,我也没有得到任何答案。问题在这里--->请注意,使用第二个方法,
$.getScript('/script.js');
如果在script.js加载一次之前多次单击按钮,则可以执行多次。(如果script.js的效果是幂等的,则这可能是一个有用的功能:如果第一次加载失败,则用户可以再次单击按钮以尝试再次加载脚本。)谢谢你的代码和解释!你的代码很有效!@AgentME是的,这是真的,谢谢你提到它!请注意,对于第二种方法,
$.getScript('/script.js');
可以在script.js加载一次之前多次单击按钮执行多次。(如果script.js的效果是幂等的,那么这可能是一个有用的功能:如果第一次加载失败,那么用户可以再次单击按钮尝试再次加载脚本。)感谢您的代码和解释!您的代码很有效!@AgentME是的,是的,谢谢您的提及!