我一直在努力解决这个问题并且无法理解。希望这是我错过的显而易见的东西。
以下是代码:
$(document).ready(function() {
$('#clickbox').load('eventpage/clicks.html.php #click2', function () {
console.log('click2 loaded');
$(this).hide()
.fadeIn(3000);
$('#click2').click(function(e) {
e.preventDefault();
console.log('click2 clicked');
$('#bizdev').load('pagewithscripttags.php', function (data) {
console.log(data);
console.log('#bizdev is loaded, but scripts are not run');
$('#bizdev').hide();
console.log('bizdev hidden');
});
$('#content').hide();
$('#bizdev').show();
});
});
当我运行它(从外部js文件)时,文件'pagewithscripttags.php'被加载到click事件的DOM中,但是脚本没有执行,我无法找出原因。帮助!
但是,当我将load方法移动到第一个加载的回调函数时,文件将被插入到DOM中并运行脚本:
$(document).ready(function() {
$('#clickbox').load('eventpage/clicks.html.php #click2', function () {
console.log('click2 loaded');
$(this).hide()
.fadeIn(3000);
$('#bizdev').load('pagewithscripttags.php', function (data) {
console.log(data);
console.log('#bizdev loaded and scripts are run');
$('#bizdev').hide();
console.log('#bizdev hidden');
});
$('#click2').click(function(e) {
e.preventDefault();
console.log('click2 clicked');
$('#content').hide();
$('#bizdev').show();
});
});
为什么脚本作为回调函数的一部分运行,而不是单击事件(我需要它们运行时)?
以下是pagewithscripts.php的内容:
<script>console.log('this script was run');</script>
<script type="IN/MemberProfile" data-id="http://linkedin.com/publicprofileurl" data-format="inline" width='106px' data-related="false"></script>
第一个脚本运行并显示在console.log上,但第二个脚本只是插入到DOM中而不运行,除非我将.load()方法放在click处理程序之外。
(我需要在点击事件上加载脚本,因为它们需要几秒钟才能运行(它们调用LinkedIn API),当我在文档就绪时运行它们时会出现冻结/延迟。)
答案 0 :(得分:0)
答案 1 :(得分:0)
实际上jQuery' click()'函数无法处理动态元素的“点击”事件,因此请尝试on()或live()函数以使您的代码正常工作,使用这些函数,您可以将点击处理程序代码移出第一个load()回调。
仅供参考:尝试使用此$('#click2').click(function(e) {
代码替换$('#click2').live("click", function(e) {
代码。
注意:从jQuery版本1.7开始,不推荐使用'live()'函数。
如果您不清楚使用这些功能,请提供完整的页面来源,以便我可以相应地检查和调整您的代码。
答案 2 :(得分:0)
您可能需要告诉LinkedIn框架重新扫描页面。
IN.parse(れ)
这里有关于事件的JavaScript API参考文档: https://developer.linkedin.com/documents/inauth-inevent-and-inui