Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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
Jquery 活动授权问题_Jquery_Events_Delegation - Fatal编程技术网

Jquery 活动授权问题

Jquery 活动授权问题,jquery,events,delegation,Jquery,Events,Delegation,事件委派有问题,就是无法解决。根据我迄今为止所写的代码,有人能指出正确的方向吗?我离这里很远吗 #activity中的所有内容都是通过ajax加载的 <div id="activity"> <table class="activityLog"> <thead> <tr> <th class="action">Activity</th>

事件委派有问题,就是无法解决。根据我迄今为止所写的代码,有人能指出正确的方向吗?我离这里很远吗

#activity
中的所有内容都是通过ajax加载的

<div id="activity">
    <table class="activityLog">
        <thead>
            <tr>
                <th class="action">Activity</th>
                <th class="datetime">Date</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Log in succesful</td>
                <td>15th October 2013 - 6:29 PM</td>
            </tr>
            <tr class="odd">
                <td>Logged out successfully</td>
                <td>14th October 2013 - 10:03 PM</td>
            </tr>
        </tbody>
    </table>
    <ul id="activityPaganation" class="paganation">
        <li><span>1</span></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
    </ul>
</div>
$("#activityPaganation").on("click", "li a", function(e) //doesn't work

然后将其委托给
活动
,因为该活动似乎没有改变。您的ajax调用会再次覆盖
activityPagation
,因此不会持久化上的事件绑定

$("#activity").on("click", "li a", function(e) {
    e.preventDefault();
    var pid = $(this).text();
    alert('1234567');
    /*$.post("ajax.php", {aid:1,page:pid}, function(response) {
        $("#activity").html(response);
        alert(pid);
    });*/
});
这里是事件委派的基本原则,只要需要事件或文档头(最坏的情况),就可以将事件绑定到DOM中存在的容器。在其子体上发生的任何单击都会冒泡到父级(您将事件绑定到该父级),然后jquery会查找选择器匹配(对于您在语法中的过滤器中提供的选择器),如果它来自该选择器,则执行处理程序

还请注意,对于当前的事件注册,第一次事件注册不应工作,因为加载是异步的,在加载完成之前执行事件注册部分。

$(“#活动”)开头。
不是布尔值。它是一个jQuery选择器,因此使用
.length()
检查它是否存在。说明:如果长度为0,则为false,其他所有内容均为true

if($("#activity").length) {
    $("#activity").load("ajax.php?aid=1");
}
说到您的问题,#activityPagation是动态加载的,因此您不能基于该选择器使用
.on()
。您可能需要一些不是通过ajax加载的东西

<div id="activity">
    <table class="activityLog">
        <thead>
            <tr>
                <th class="action">Activity</th>
                <th class="datetime">Date</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Log in succesful</td>
                <td>15th October 2013 - 6:29 PM</td>
            </tr>
            <tr class="odd">
                <td>Logged out successfully</td>
                <td>14th October 2013 - 10:03 PM</td>
            </tr>
        </tbody>
    </table>
    <ul id="activityPaganation" class="paganation">
        <li><span>1</span></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
    </ul>
</div>
$("#activityPaganation").on("click", "li a", function(e) //doesn't work
取代

$("#activity").on("click", "li a", function(e) //works
(或者)如果
#activity
也是ajax,那么寻找任何其他静态的外部容器,(或者)作为最后手段,尽管性能很差

$("document").on("click", "li a", function(e)

#当您将事件委派给ActivityAgination时,它还不存在。加载是异步的。另外,
如果($(“#活动”){
是不需要的。如果元素不存在,加载就不会发生。