【问题标题】:jQuery click handlers not triggered inside a modal windowjQuery单击处理程序未在模式窗口内触发
【发布时间】:2013-05-15 18:42:32
【问题描述】:

我有一个非常简单的点击处理程序,它在点击时发出 AJAX GET 请求,如下所示:

$('span.switch-option').click(function() {
    $(this).parents('div.log-in-option').hide();
    $(this).parents('div.log-in-option').siblings('div.log-in-option').fadeIn();
});

这在网站上的任何其他地方都可以完美运行。但是,当我尝试在模态窗口中单击类 switch-option<span> 元素时,该事件不会触发。但是,在控制台中输入 click-handler 函数的内容并运行它们确实会执行所需的行为。

为什么单击处理程序不会在此模式窗口中触发?我正在使用流行的 SimpleModal 插件 http://www.ericmmartin.com/projects/simplemodal/ 和 jQuery 1.9.1。

这里有一个活生生的例子:http://ec2-107-22-8-70.compute-1.amazonaws.com/thread/19。如果您单击50,000 reps 或任何用户的信誉,然后尝试单击对话框中的蓝色大链接,则单击处理程序不会触发。这种行为也会发生在不同模式窗口中的其他点击处理程序中。

【问题讨论】:

    标签: javascript jquery click modal-dialog simplemodal


    【解决方案1】:

    当你的脚本(main.js)运行时,元素'li.log-in, a.log-in'在dom中不存在,它们会在创建弹出窗口时动态加载,因此jQuery无法绑定事件处理程序

    尝试事件传播

    $(document).on('click', 'li.log-in, a.log-in', function() {
            $.get('/login/', function(data) {
                //make a modal window with the html
                $.modal(data);
            });
            return false;
        });
    

    【讨论】:

    • 现在试试这个。我还更新了初始问题中的 JS 代码,因为我 c/p'd 了错误的点击处理程序,但它根本没有改变问题。
    • 编辑:刚刚做了,效果很好。你是个巫师,解释很有道理。我现在感觉自己像个假人。
    • @wnajar 查看更新后的答案,您可以使用 jquery 在 Web 中搜索动态元素和事件处理,SO 本身有很多问题处理相同,并且 Web 中提供了其他资源
    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    相关资源
    最近更新 更多