我有两个编码精确的文件,文件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是否可以在弹出窗口中使用?如果是这样,怎么样?
答案 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。为动态内容分配事件处理程序可能很棘手。
如果在文档就绪处理程序中绑定事件,则可能是事件处理程序未绑定到弹出窗口中的内容。有两种方法可以解决这个问题:
如果元素具有统一的事件处理程序,请为它们分配一个可用作选择器的类,并使用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)
如果您使用的是jQuery 1.7+,可以使用.on
,只需在加载时在页面上的所有#send-email
上执行委托,或者使用AJAX以dyanmic加载它:
$(function() {
$(document).on("click", "#send-email", function(e) {
alert('works');
e.preventDefault();
});
});