我无法找到.on’click’功能来处理AJAX加载的内容。
我以前一直在使用jquery .live,但是这是第一次使用.on,并且理解它的工作方式完全相同,所以不确定为什么我有问题。
以下是给您单击的元素的HTML
<h1>Press & 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>
$("#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); }); }); });