javascript - 名为 "open"的函数加载一个新页面 - 尝试使用内联 JS 更改 iframe src

标签 javascript html iframe

我写了一个简单的函数来改变 src iframe 的属性,这是代码:

function open(dat) {
 document.getElementById('frame1').src = dat;
}

我是这样调用函数的:

<table id="maintab1" align="center" border="0" style="width:95%">
      <tr>
        <td width="50%" onclick="open('/timetrials/european/mushroom.php');"> text </td>
        <td width="50%" onclick="open('/timetrials/european/flower.php');" > text </td>
      </tr>
</table>

当然,iframe 的 ID 为“frame1”,如您所见:<iframe id="frame1" src="/timetrials/european/mushroom.php" >You browser does not support iframes.</iframe> .页面首先正确加载到 iframe 上。

当我点击 <td> ,而不是更改我的 iframe 的 src,我看到一个新的空白页面永远加载而没有得到结果。

你知道为什么吗?

最佳答案

再次说明内联js的弊端!这是因为 window 有一个名为 open 的属性,当您使用 onlick="open()" 时,您调用了错误的 打开()!不要使用内联 js!

阅读其中一些结果: Why is inline JS bad?

解决整个问题的一个简单方法就是像这样使用针对 iframe 的链接:

<a href="new/iframe/path" target="myiframe">Change iframe path!</a>
<iframe name="myiframe"></iframe>

改进您当前的代码:

Live demo here (click).

标记:

<table id="maintab1" >
  <tr>
    <td width="50%" data-open="/timetrials/european/mushroom.php');">Mushroom</td>
    <td width="50%" data-open="/timetrials/european/flower.php');" >Flower</td>
  </tr>
</table>

JavaScript:

//get element references
var tds = document.querySelectorAll('#maintab1 td');

//loop each element
for (var i=0; i<tds.length; ++i) {
  //register click function
  tds[i].addEventListener('click', myClickFunc); 
}

function myClickFunc(event) {
  var link = this.getAttribute('data-open');
  openIframe(link);
}

//also note that camelCase naming is standard
function openIframe(link) {
  console.log(link);
}

有很多方法可以做到这一点,但关键是使用 javascript 获取元素引用并在其中附加点击功能。随心所欲地选择它们 - id、class、选择器,或者您甚至可以使用 javascript 创建元素本身!与其像我的示例中那样将数据存储在元素上,不如将它们存储在 javascript 中的数组中,然后为循环中的每个元素拉出它们(第一个元素将从数组中获取第一个链接,等等)。

关于javascript - 名为 "open"的函数加载一个新页面 - 尝试使用内联 JS 更改 iframe src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20928429/

相关文章:

javascript - 在 TrustPilot 小部件中自定义 JS/CSS

javascript - 如何使用 html、css 和 js 文件构建可在任何 Android 手机上运行的 APK 文件

ios - iPad 中 iFrame 中的 Extjs Web 应用程序链接没有响应

javascript - 了解如何使用 jQuery 插件 RhinoSlider

javascript - 如何在 View 中呈现 Backbone.Model 错误而不丢失无效输入?

javascript - 如何干净地访问 jquery 对象的直接后代?

javascript - 获取用户位置并在数据库中保存坐标

javascript - 如何使整个列表项可点击?

testing - Selenium WebDriver : How to wait for iframes to load completely? 可以点击 iframe 元素文本框 id = “div_4_1_2_1_1-lnk”

javascript - 从 iframe 访问 id