【问题标题】:How to bind an event within dynamically loaded content on a click event?如何在点击事件的动态加载内容中绑定事件?
【发布时间】:2016-06-16 18:27:51
【问题描述】:

我的 html 中有一个 id 为 pageContent 的 div。当用户点击各种按钮时,它会加载相应的内容。当用户单击它加载的 javaQuestions 按钮时,javaQuestions.html 进入 div 就好了。但是,在javaQuestions.html 里面,我有一个可折叠的列表,我想不出一种方法来“绑定”li 折叠/取消折叠,而无需用户单击两次。我现在拥有的是:

$("#pageContent").on('click', 'li', function (){
    $('.collapsible').collapsible();
});

所以我猜会发生什么,首先用户点击按钮,然后加载内容。然后,用户单击任何 li,它会启用“collapsible()”功能,但不会取消折叠/折叠内容。只有当用户第二次点击时它才能正常工作。我尝试将$('.collapsible').collapsible(); 行添加到加载javaQuestions.html 内容的事件中,但它没有做任何事情。有点障碍,有什么想法吗?

编辑:这是加载内容的代码:

$("#pageContent").on('click', '#javaQuestions', function (e) {
    fadeIn("#pageContent", "../java-questions/javaQuestions.html", 50);
    fadeIn("#commentsContent", "../comments/comment-section.html", 500);
});

我也很想知道一旦我弄清楚了它会如何运作。但正如您所看到的,上述函数加载了 javaquestions.html,我似乎无法找到一种方法来将 'li' 绑定为一举折叠。

【问题讨论】:

  • 你能粘贴加载javaQuestions的代码吗
  • 你能展示你的加载内容的代码吗?
  • 您可以尝试$('.collapsible').collapsible().collapsible('expand') 立即展开。但很难判断您是否真的要展开页面中的所有可折叠项。也许$('.collapsible', this).collapsible().collapsible('expand')
  • 我添加了一个代码 sn-p 显示它如何加载内容@weigreen

标签: javascript jquery html css ajax


【解决方案1】:

您是否尝试过使用 jQuery bind 方法?您可以将您的处理程序绑定到,例如,body,然后您不必关心在它之后加载和附加处理程序。

更新:这可能会有所帮助:

$(document).ready(function() {
    $("body").on('click', '#pageContent li', function (){
        $('.collapsible').collapsible();
    });
});

【讨论】:

  • “从 jQuery 1.7 开始,.on() 方法是将事件处理程序附加到文档的首选方法。”我更愿意想办法用 .on() 做到这一点
  • @VDog 然后查看.on() 描述中的“直接和委托事件” (api.jquery.com/on)。您只需要将处理程序附加到始终存在的父级(如body)并添加一个选择器参数来选择需要事件处理的元素(在主体的子级中选择)。
  • 是的,这就是我为点击功能所做的事情,但是如何在页面加载后使用 .on 来绑定事件?比如我为 eventType 输入了什么关键字
  • @VDog 所以我几分钟前添加到答案中的代码也不起作用? (也尽量放在body标签之后)
  • 不幸的是。这是我一开始所做的,但它“工作”的方式是第一次单击激活 li 上的“可折叠”,并且包括第二次单击在内的所有其他单击都会按应有的方式折叠/取消折叠表格:(跨度>
【解决方案2】:

使用此文档,因为它是动态加载的

$(document).on("click","li #pageContent",function(){ 
$('.collapsible').collapsible();
});

【讨论】:

  • 我认为您的意思是“#pageContent li”,但无论如何,这都会导致完全相同的问题。它适用于第二次单击,因为一旦用户单击一个 li,它就会激活可折叠方法,但我只希望该方法在页面加载/当用户单击动态加载的按钮时运行并绑定到 li内容。
  • 我无法理解你的问题,我想这会对你有所帮助css-tricks.com/dynamic-page-replacing-content
  • 问题是: 1) 用户点击一个按钮来动态加载内容。这工作得很好。 2)这个动态加载的内容中有一个可折叠列表,需要通过$("collapsible").collapsible()来初始化并绑定到li。 3)我不知道如何做第 2 步,没有像“click”这样的绑定事件,这是当前正在发生的事情。它现在的工作方式是,用户点击 li,链接到 li 的点击事件注册了这个,所以在第一次点击后它可以工作,但我希望它在第一次点击时立即工作。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 2014-01-15
  • 2019-05-21
  • 2021-09-03
  • 2017-08-07
  • 1970-01-01
  • 2014-06-13
  • 2013-05-11
相关资源
最近更新 更多