【问题标题】:jQuery code does not fire on modal formsjQuery 代码不会在模态表单上触发
【发布时间】:2014-04-28 03:58:04
【问题描述】:

我有一个简单的链接,可以触发 ajax 调用并更改状态,我希望新状态(立即)反映在模态表单上。

问题是:当我单击模态表单上的链接(如下)时,什么也没有发生。

<a title="Autoplay" data-placement="top" data-toggle="tooltip" class="glyphicon glyphicon-stop" id="autoplayStatus" href="#"></a>

在 $(document).ready() 中,我有这个:

$("#autoplayStatus").click(function(event){
        alert('test');
    })

我应该做些什么来确保 jQuery 可以选择并绑定到模态表单上的对象?

【问题讨论】:

标签: javascript jquery ajax twitter-bootstrap modal-dialog


【解决方案1】:

为了确保 jQuery 绑定到 Bootstrap 创建的模态中的按钮(或其他东西),您应该像这样编写事件处理程序:

$(document).ready(function() {
    $('.container').on('click', '#autoplayStatus', function() {
        alert('Ohai!');
    });
});

然后,在我的示例中,将锚标记包装在容器中:

<div class="container">
    <a title="Autoplay" data-placement="top" data-toggle="tooltip" class="glyphicon glyphicon-stop" id="autoplayStatus" href="#"></a>
</div>

顺便说一句,在创建按钮时,最好使用&lt;button&gt; 而不是&lt;a&gt;。 =)

【讨论】:

  • 出于好奇,为什么要详细说明创建一个 div,然后使用 .on 将点击绑定到该 div 中的 id?更好的做法还是存在性能差异?
  • 好吧,假设“.container”包含一系列动态生成的按钮。在这种情况下,绑定到“.container”而不是按钮可以防止您在创建按钮后再次绑定它们。您可以将其视为在整个容器上注册一次点击,但仅在它位于给定选择器上时才关心它,在这种情况下为“#autoplayStatus”。忘了补充:不确定是否有任何性能优势,但你的 JavaScript 肯定会变得更干净。
  • 代码有效,但我在 div 中有两个元素(复选框)。我使用了类/容器函数,所以我只需要编写一个函数来管理它们,但是每个复选框都带有一个 ajax 调用所需的数据属性。 $(this) 不再指单击的复选框,而是指 div。如何引用(特别)被单击的复选框,以便我可以从数据属性中提取该 ID?
  • This SO answer 希望对您有所帮助。您基本上使用context 定义this
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2021-10-23
相关资源
最近更新 更多