【发布时间】:2014-06-25 13:58:45
【问题描述】:
我正在使用 jQuery 1.9.1,并且有两种情况可以通过 AJAX 调用加载相同的内容。由于有两种情况,我使用类作为选择器而不是 ID,因为 ID 仅适用于第一个实例。
场景一,在菜单中,一个带有 class="firstlink" 的 href 元素。
场景二,一个自定义的自动完成,它输出一个链接作为搜索词,同样,这个链接有“firstlink”类。在文档中调用自动完成脚本。
以下工作在页面上的第一次和后续加载/点击时单击菜单项类“firstlink”。
$(document).ready(function(){
$(".firstlink").click(function(){
$.ajax({url:"resources/pageone.html",dataType:"html",success:function(result){
$(".content-area").html(result);
}});
});
});
因为自动完成将第二个链接与“firstlink”类添加到 DOM 中,以上不适用于同一个类的动态生成链接,所以我必须使用“on”,我正在使用这样:-
$(document).ready(function(){
$(document).on("click",".firstlink", function () {
$.ajax({url:"resources/pageone.html",dataType:"html",success:function(result){
$(".content-area").html(result);
}});
});
});
这适用于类“firstlink”的动态生成元素,但不适用于 DOM 中类“firstlink”的菜单项。
我也试过在同一个文档准备功能:-
$('.firstlink').on("click" ,function() {
$.ajax({url:"resources/pageone.html",dataType:"html",success:function(result){
$(".content-area").html(result);
}});
});
});
这适用于具有类“firstlink”的静态(已存在于 DOM 中)元素,但不适用于具有相同类名的动态创建元素。
我确信这一定是有原因的,并且我不需要为同一个函数定义两次相同的代码,如 "$(".firstlink").click(function(){" 和"$(document).on("click",".firstlink", function () {" 产生相同的结果 - 加载相同的 AJAX 内容。
示例 HTML 代码:-
静态 HTML:-
<ul>
<li><a href="#" class="firstlink">click here first</li>
<li><a href="#" class="secondlink">click here second</li>
<li><a href="#" class="thirdlink">click here third</li>
</ul>
自动完成(jQuery)动态生成的链接是这样的:-
<div class="search-output">
<a href="#" class="firstlink">please click here</a>
</div>
`
【问题讨论】:
-
你能展示你的html吗?
-
委托取决于事件冒泡。如果你有一个包含静态
.firstlink的元素,它有一个click处理程序,并且它使用stopPropagation(),这将阻止它冒泡到document。 -
据我所知,我没有在任何地方使用 stopPropagation()。使用示例 HTML 代码编辑 OP。
标签: jquery dom dynamic static click