Javascript 如何将on()和delegate()用于同一个ajax?
我有一个3层数据显示: 基本HTML结构:Javascript 如何将on()和delegate()用于同一个ajax?,javascript,php,jquery,ajax,onclick,Javascript,Php,Jquery,Ajax,Onclick,我有一个3层数据显示: 基本HTML结构: <article id="container"> <header> <h1>Tier One (PHP Loop) <a href="#" class="confirm">X</a></h1> </header> <section> <!-- Filled by ajax call from Tier 1 -->
<article id="container">
<header>
<h1>Tier One (PHP Loop) <a href="#" class="confirm">X</a></h1>
</header>
<section> <!-- Filled by ajax call from Tier 1 -->
<h2>Tier Two <a href="#" class="confirm">X</a></h2>
<section> <!-- Filled by ajax call from Tier 2 -->
<p>Tier Three <a href="#" class="confirm">X</a></p>
<p>Tier Three <a href="#" class="confirm">X</a></p>
<p>Tier Three <a href="#" class="confirm">X</a></p>
<p>Tier Three <a href="#" class="confirm">X</a></p>
<p>Tier Three <a href="#" class="confirm">X</a></p>
<p>Tier Three <a href="#" class="confirm">X</a></p>
</section>
</section>
</article>
适用于第1层,但不适用于第2层和第3层
或 适用于第2层和第3层,但不适用于第1层
函数中的其他所有内容几乎相同。有几个变量,但它们都从锚(id等)中提取相同的基本
数据,然后ajax只是从处理程序发送不同的数据
我可以轻松地复制jQuery代码并更改处理程序。但我相信一定有办法将处理程序组合成一个语句
我尝试过一些事情,比如$(“#container,header').delegate()
或$(“#container,h1').delegate()
我还尝试了bind()
和live()
,但没有成功
这可能吗
如果有区别的话,我使用jQuery191和jQueryUI1114
从jQuery 1.7开始,.delegate()已被()上的.on>方法取代
您需要的是活动授权,如下所示:
$('#container').on('click', 'a.confirm', function (e) {
e.preventDefault();
$.ajax({ });
});
希望这有帮助
从jQuery 1.7开始,.delegate()已被()上的.on>方法取代
您需要的是活动授权,如下所示:
$('#container').on('click', 'a.confirm', function (e) {
e.preventDefault();
$.ajax({ });
});
希望这有帮助。谢谢,但我试过了。它在第1层也失败了。第1层从未看到单击事件。仅适用于第2层和第3层。抱歉,编辑了这些问题。我忘了把它包括进去。@Scott那么你的问题就在别处了,因为这个答案中的代码应该针对这三个问题。你可能有重复的容器id。@KevinB-hmm。。。word在php和js文件中搜索了容器ID…(只有1个php页面和1个自定义jquery外部),我在这两个文件中只找到1个ID。但我会继续查找。@KevinB您是对的,这似乎是一个本地化问题。如果该容器div位于循环中,它将多次插入页面,即使它只在您的php文件中插入一次。谢谢,但我尝试了这个方法。它在第1层也失败了。第1层从未看到单击事件。仅适用于第2层和第3层。抱歉,编辑了这些问题。我忘了把它包括进去。@Scott那么你的问题就在别处了,因为这个答案中的代码应该针对这三个问题。你可能有重复的容器id。@KevinB-hmm。。。word在php和js文件中搜索了容器ID…(只有1个php页面和1个自定义jquery外部),我在这两个文件中只找到1个ID。但我会继续查找。@KevinB您是对的,这似乎是一个本地化问题。如果容器div在循环中,它将多次插入页面,即使它只在php文件中插入一次。委托版本(无论是.delegate()还是.on())应该适用于所有三层,而不仅仅适用于2和3层。它确实在这里起作用:@nnnnnn我还活着,但不知道如何在小提琴中实现ajax调用。问题是没有调用单击处理程序,还是ajax不起作用?你可以用小提琴来做一个虚拟的ajax调用,但是我认为你描述的问题是点击处理程序没有被调用。在我之前的评论中链接到的小提琴中,点击对所有层都适用。(抱歉,在看到您的回复之前,我编辑了我之前的评论。)@nnnnnn除了我在上面发布的第一个on('click')
函数之外,第1层中的单击处理程序没有被调用(但是第2层和第3层不起作用)。ajax运行良好,只是三个单击处理程序,我无法一次访问所有功能。我不理解否决票,不管是谁投的。委托版本(无论是.delegate()还是.on())应该适用于所有三层,而不仅仅是2层和3层。它确实在这里起作用:@nnnnnn我还活着,但不知道如何在小提琴中实现ajax调用。问题是没有调用单击处理程序,还是ajax不起作用?你可以用小提琴来做一个虚拟的ajax调用,但是我认为你描述的问题是点击处理程序没有被调用。在我之前的评论中链接到的小提琴中,点击对所有层都适用。(抱歉,在看到您的回复之前,我编辑了我之前的评论。)@nnnnnn除了我在上面发布的第一个on('click')
函数之外,第1层中的单击处理程序没有被调用(但是第2层和第3层不起作用)。ajax工作得很好,它只是三个点击处理程序,我不能一次访问所有功能。我不理解否决票,不管是谁投的。
$('#container').on('click', 'a.confirm', function (e) {
e.preventDefault();
$.ajax({ });
});
$('#container').on('click', 'a.confirm', function (e) {
e.preventDefault();
$.ajax({ });
});