javascript - jQuery 将事件绑定(bind)到具有动态类的元素

标签 javascript jquery events dynamic

我有一个触发元素和一个响应元素。

<div class="more"></div>
<div class="info"></div>

我想绑定(bind)一个打开/关闭类型的事件。

$('.more').delegate($('.more'), 'click', function(){
    $(this).removeClass('more');
    $(this).addClass('less');
    $(this).text("less...");
    $('.info').addClass("open");
});

$('.less').delegate($('.less'), 'click', function(){
    $(this).addClass('more');
    $(this).removeClass('less');
    $(this).text("more...");
    $('.info').removeClass("open");
});

它没有按预期工作,如果第二个函数嵌套在第一个函数中,那么您只能打开和关闭一次。 如果脚本的格式如上所示合理,它将打开但不会关闭。

谁能帮帮我? 如果脚本可以支持 .info 可以是同级元素或紧跟在 $(.more/.less) 的父级之后的元素,则奖励。

我一直在玩弄 .on/.live/.bind 但不如上面成功。

最佳答案

使用事件 delegation ,并绑定(bind)到文档或直接父元素,而不是相同的元素

$(document).on( 'click',".more", function(){
    $(this).removeClass('more');
    $(this).addClass('less');
    $(this).text("less...");
    $('.info').addClass("open");
});

$(document).on('click',".less", function(){
    $(this).addClass('more');
    $(this).removeClass('less');
    $(this).text("more...");
    $('.info').removeClass("open");
});

DEMO

注意:委托(delegate)已与最新版本的 jquery 过时,因此请改用 on问题:您被委托(delegate)给相同的元素 $('.less'),$('.more') 使用直接 parent 或 document

关于javascript - jQuery 将事件绑定(bind)到具有动态类的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25158078/

相关文章:

jquery:在 keyup 上执行此操作,除非该人位于文本区域或输入中

c# - 将 WPF 事件映射到 Windows 窗体事件

javascript - 如何访问滚动事件内的对象范围?

javascript - 在 Phonegap 应用程序中组织 Javascript 代码的最佳方式

javascript - 是否可以在 Highcharts 中添加气泡大小的图例?

javascript - 如何在 JavaScript 循环中添加不同的延迟?

c# - 使用 jquery/Ajax 使用对象模型渲染部分 View

JavaScript 和 HTML : Event Listener Is Not Producing Text Alert As Expected; ReferenceError: button is not defined

javascript - 如何使用 Jquery 或 Javascript 按顺序单击每个按钮来选择每个 <li>

javascript - 访问在 JavaScript 中使用 attachEvent()/addEventListener() 添加的事件