使jquery .on函数与AJAX加载的内容一起工作

前端之家收集整理的这篇文章主要介绍了使jquery .on函数与AJAX加载的内容一起工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法找到.on’click’功能来处理AJAX加载的内容

我以前一直在使用jquery .live,但是这是第一次使用.on,并且理解它的工作方式完全相同,所以不确定为什么我有问题。

以下是给您单击的元素的HTML

<h1>Press &amp; Media</h1>
    <div id="back"></div>
    <div id="overlay-content">
        <span id="edocs" class="tab"></span>
        <span id="news" class="tab"></span>
        <span id="partners" class="tab"></span>
    </div>

以下是加载AJAX内容功能

$("#overlay-content").on('click','#news',function() {
        var active = 1;
        $("#loading").show();
        $("#overlay-content").fadeOut(1000,function() {
            $.get("http://<? echo ROOT; ?>includes/functions.PHP",{ pressmediaNews: active },function(data) {
                $("#loading").hide(400);
                $("#overlay-content").empty().append(data).fadeIn(1000);
            });
        });
    });

这应该加载以下HTML

<div id="news-left-panel">
        <h4>News Section</h4>
        <ul>
            <li id="newsID2" class="newsYear">
                <p>2012</p>
                <ul class="newsMonths" style="display:none">
                    <li>Jan
                        <ul class="newsArticles" style="display:none">
                            <li onClick="newsID(2)">test</li>
                        </ul>
                    </li>
                    <li>Feb</li>
                    <li>Mar</li>
                </ul>
            </li>
            <li id="newsID1" class="newsYear">
                <p>2011</p>
                <ul class="newsMonths" style="display:none">
                    <li>Dec
                        <ul class="newsArticles" style="display:none">
                            <li onClick="newsID(1)">Test</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </div>

现在上面的代码根本就不会执行,在firebug中显示任何错误等等。

所以我有点迷茫,为什么它不执行,alert()甚至不执行。

解决方法

首先确保你击中目标,尝试这个,看看警报是否显示
$(function() {
    $(document).on('click',function() {
       alert('ok');
    });
});

如果在点击#news元素时显示警报,没关系。

现在到这一行:

$.get("http://<? echo ROOT; ?>includes/functions.PHP",

你正在使用简化的PHP开放,那需要打开,你可以尝试

<?PHP echo ROOT; ?>

但是,ROOT的原理是什么,从来没有见过,在ROOT的PHP手册中找不到任何东西,所以我用最新版本的PHP在我自己的服务器上尝试,并且出现错误,因为“ROOT”不存在,相反,它认为它是一个字符串,只是回显“ROOT”,所以你的链接看起来像:

$.get("http://ROOTincludes/functions.PHP",

它是一个你自己定义的变量,它应该以美元开头,如果它是使用define()定义的东西,请确保正确设置,如果它使用的东西像$ _SERVER [‘DOCUMENT_ROOT’];这并不总是你可以在javascript中访问的东西,因为它通常是一个比您的webroot更高的文件夹,不能在客户端访问,只能在服务器端访问。

另外,你写的方式,从http://开始应该是一个域名。
尝试在浏览器中打开视图源,并找到您的ajax函数,并查看ROOT实际输出内容,因为最终输出将在源代码中可见,如果在包含的配置文件等中使用define()设置,则可以看到它设置正确。

您的javascript也必须在PHP文件中执行,否则您将不得不修改您的服务器设置以通过PHP运行JS文件

在我看来,使用路径和文件名是正确的方法,尝试这个并注意控制台(F12):

$(document).on('click',function() {
    var active = 1;
    var XHR = $.ajax({
                   type: 'GET',url : '/actualpath/includes/functions.PHP',data: { pressmediaNews: active }
              }).done(function(data) {
                   console.log(data);
              }).fail(function(e1,e2,e3) {
                   console.log('error : '+e1+' - '+e2+' - '+e3);
              });
    $("#loading").show();
    $("#overlay-content").fadeOut(1000,function() {
        XHR.done(function(data) {
            $("#overlay-content").empty().append(data).fadeIn(1000);
            $("#loading").hide(400);
        });
    });
});

猜你在找的jQuery相关文章