Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将on()和delegate()用于同一个ajax?_Javascript_Php_Jquery_Ajax_Onclick - Fatal编程技术网

Javascript 如何将on()和delegate()用于同一个ajax?

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 -->

我有一个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 -->

         <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({ }); 
});