【问题标题】:Can't access element using its new id无法使用新 ID 访问元素
【发布时间】:2014-10-10 22:49:23
【问题描述】:

我正在尝试使用它的新属性访问一个元素。

HTML

<div class="element">Element1</div>

脚本是

$('.element').one("click", function() 
{
    $.getScript('/script.js');
});  

$('#activated').click(function() 
{
    alert(1);
});

在 script.js 文件中:

$('.element').attr("id", "activated");

script.js 将 ID #activate 添加到 div,但 .click() 无法使用新 ID。

谁能告诉我为什么?

【问题讨论】:

  • 那是因为您可能在$(document).ready(... 中运行$('#activated').click(...,并且由于您动态插入activated id,直到您单击element div 之后它才会出现,这将在@987654328 之后很久发生@已执行。所以$('#activated') 将找不到。
  • @SaniHuttunen,是的,脚本在 $(document).ready 中运行,但我删除了它,仍然是同样的问题。

标签: javascript jquery


【解决方案1】:

$('#activated') 在任何元素具有该 id 之前被评估,因此它找不到任何元素,并且没有任何点击处理程序附加到任何元素。

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

$(document.body).on('click', '#activated', function() 
{
    alert(1);
});

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 请注意,使用第二种方法,如果在 script.js 加载一次之前多次单击按钮,$.getScript('/script.js'); 可以执行多次。 (如果 script.js 的效果是幂等的,那么这可能是一个有用的功能:如果它第一次加载失败,那么用户可以再次单击按钮以再次尝试加载脚本。)
    • 感谢您的代码和解释!您的代码有效!
    • @AgentME 是的,这是真的,谢谢你提到它!
    【解决方案3】:

    试试$(document).on('click','#activated',function(){ // do somthing here }); 它可能会起作用。告诉我它没有。

    【讨论】:

    • click 方法在后台调用on 方法,所以实际上它并没有什么区别,如果你想委托事件,应该使用另一个版本的on 方法.
    • @undefined: 现在呢?
    • @undefined 我有一个问题,即使经过尽可能多的研究,我也没有找到答案,如果你能帮助你获得良好的声誉,我也没有得到任何答案。问题在这里--->请帮助stackoverflow.com/questions/26306067/…
    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2021-03-13
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多