jQuery单击在弹出窗口中不起作用

时间:2012-08-22 17:19:30

标签: jquery popup jquery-ui-dialog

我有两个编码精确的文件,文件A和B.在文件A中,有一些链接用于创建文件B的弹出窗口。在文件A的顶部,我创建了一个链接(一个href),单击时,提醒用户。这个确切的代码在文件B中。它适用于文件A,但不适用于文件B.

    <a href="#" id="send-email">Send Email</a>

和jQuery:

    $('#send-email').click(function(e) {
        alert('works');
    });

奇怪的是,它们都链接到相同的外部jQuery文件,并且除了弹出式点击之外,其他所有jQuery函数都有效(例如,手风琴菜单)。我首先尝试使用jQueryUI,但这就是我发现这个问题的方法;然后我去了准系统点击警报,这就是我上面发布的代码。

.click是否可以在弹出窗口中使用?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:1)

弹出窗口与任何其他页面没有什么不同(除非您在某些浏览器中讨论会话状态和上下文,但这不是问题)。 click在弹出窗口中的功能与其在任何其他窗口中的功能相同。但是,有很多事情可能导致你的问题。重复的ID,缺失/拼写错误的功能等

所以我还不能给你一个确定的答案,但这是调试它的一个很好的步骤:

而不是按照你的方式附加点击事件(注意你的方式比我的方式更正确,但我的方式有助于调试),这样做:

<a href="#" onclick = "alert('works')" id="send-email">Send Email</a>

如果这不起作用,也许你会阻止弹出窗口或其他东西。这是警报的问题。如果它可以工作,试试这个:

<a href="#" onclick = "AlertIt()" id="send-email">Send Email</a>

在您网页的其他地方:

function AlertIt() {
alert("worked");
}

如果这也有效,那么你很可能会看到加载jQuery或jQuery冲突的问题。

编辑:哦,还有一件事。尝试使用jQuery的live函数。这会将事件处理程序附加到元素,无论它们是否已存在。 click仅在元素已存在时附加事件。这可能是由操作顺序引起的,可以说是你正在使用的。

live看起来像这样:

$("#send-email").live("click", function(){ alert("Worked"); });

答案 1 :(得分:1)

同意@voigtan。为动态内容分配事件处理程序可能很棘手。

如果在文档就绪处理程序中绑定事件,则可能是事件处理程序未绑定到弹出窗口中的内容。有两种方法可以解决这个问题:

  1. 显示弹出内容后进行回调,并绑定新元素的事件
  2. 如果元素具有统一的事件处理程序,请为它们分配一个可用作选择器的类,并使用jQuery :: live()调用附加事件。这是一个例子:

    <a href="#" class="send-email">Send Email</a>
    
    $(function() {
        $(document).on("click", "a.send-email", function(e) {
            alert('works');
            e.preventDefault();
        });
    });
    

答案 2 :(得分:0)

你对弹出窗口的意思是什么?你的意思是jQueryUI对话框吗?如果加载javascript代码时是否存在标记?

如果您使用的是jQuery 1.7+,可以使用.on,只需在加载时在页面上的所有#send-email上执行委托,或者使用AJAX以dyanmic加载它:

$(function() {
    $(document).on("click", "#send-email", function(e) {
        alert('works');
        e.preventDefault();
    });
});