有没有更好的方法来动态显示包含随机jquery绑定的iframe?

这有效,但我不确定为什么(我相当确定有一种更聪明的方法来实现它)。 我有一个带有iframe的页面,src将根据需要进行更改。 我正在尝试构建这个不同的src可以在以后添加。 每次加载src后,我需要将function绑定到各种元素。 我的主要问题在下面的评论中; 但总的来说,我很好奇有更好的方法来解决这个问题。 谢谢。

  $(document).ready(function() { $(".start").click(function(){ init(); }); function init() { $("#container").html(''); //QUESTIONS: //why do these bindings work when the iframe src changes? //at the time this is run, these don't know anything about the iframe src's that will be loaded //seems like it's acting like live() rather than bind()? //is it '$("#myframe").load(...)' ? Does that run everytime the iframe is loaded? //if so, why aren't the bindings doubling up everytime the same page loads? $("#myframe").load( function() { //make sure iframe is loaded- $('#myframe').contents().find('.page2Link').click(function(){ showPage('page2'); }); $('#myframe').contents().find('.page1Link').click(function(){ showPage('page1'); }); $('#myframe').contents().find('.page3Link').click(function(){ showPage('page3'); }); $('#myframe').contents().find('.whatever').click(function(){ showPage('page1'); }); }); } function showPage(id){ console.log('showing: ' + id); switch (id){ case 'page1': $("#myframe").attr("src","testpage1.html"); break; case 'page2': $("#myframe").attr("src","testpage2.html"); break; case 'page3': $("#myframe").attr("src","testpage3.html"); break; } } });  
start

和iframe src页面:

第1页

   

第2页

   

第3页

 
show whatever page

它是’$(“#myframe”)。load(…)’? 每次加载iframe时都会运行吗?

是。

如果是这样,为什么每次同一页面加载时绑定都不会加倍?

因为iframe的内容是一个单独的DOM。 因此,每次iframe加载前一个dom都会被销毁,处理程序会附加到新DOM中的元素。

为了使其他页面可以在以后添加而不修改应该非常简单的代码。 只需将iframe加载页面中的标记更改为以下内容:

 show page 1 show page 3 

然后像这样调整你的js:

 $("#myframe").load( function() { //make sure iframe is loaded- $('#myframe').contents().find('.pageLink').click(function(e){ e.preventDefault(); var src = $(this).attr('href'); if(src){ $("#myframe").attr('src', src); return false; } }); }); 

如果您需要a标签来模仿div那么只需将它们设置为display: block在您的CSS中display: block

为什么这些绑定在iframe src发生变化时有效?

因为每次iframe源更改它都会触发load事件,并且您已为iframe load事件设置处理程序,因此绑定可以正常工作。

在运行的时候,这些对iframe src的任何信息都不知道,它会像live()而不是bind()一样?

它不像现场表演。 它的工作原理是因为仅当带有iframe的内容完全加载时才会触发加载。

它是’$(“#myframe”)。load(…)’? 每次加载iframe时都会运行吗?

是的,它每次刷新iframe或修改源时都会运行。

为什么每次同一页面加载时绑定都不会加倍?

绑定不会加倍,因为存在与iframe附加到内容。 当内容被替换时,绑定也会丢失。