代码之家  ›  专栏  ›  技术社区  ›  Christopher Altman

如何更改src并用DOJO重新加载iframe?

  •  0
  • Christopher Altman  · 技术社区  · 14 年前

    dojo.ready(function() {
      dojo.query(".link").onclick(function(e) {
        var node    = e.target;
        var url     = dojo.attr(node, "href");
        document.getElementById("audioiframe").src = url;
        dojo.stopEvent(e);
       });
    });
    

    我可以在OG Javascript或jQuery中快速完成这项工作,但需要使用DOJO。

    谢谢你

    更新:加入Strife25后,回答我的代码是:

    dojo.ready(function() {
      dojo.query(".audiolink").forEach(function(link){
          dojo.connect(link, "onclick", null, function(e){
            var node    = e.target;
            var url     = dojo.attr(node, "href");
            dojo.query("#audioiframe").attr("src", url);
            dojo.stopEvent(e);
          });
      });
    });
    

    事件被附加到链接,iframe src属性被更新,但是onclick事件没有被取消,页面的行为就像被单击了链接一样。看起来好像 dojo.stopEvent(e); 不工作(询问在哪里下载MP3文件)。另外,iframe没有重新加载,但我相信这是由于点击没有被取消。

    我是错误,不是代码!我链接到MP3,而不是放MP3的页面(长篇大论)。它起作用了。谢谢您。

    1 回复  |  直到 14 年前
        1
  •  2
  •   linusthe3rd    14 年前

    如果以错误的方式附加click事件,则应使用dojo.connect附加事件处理程序。此外,dojo.query()在运行时返回一个NodeList,而不是单个节点。

    在这种情况下使用dojo的正确方法是:

    dojo.query(".link").forEach(function(link){
        dojo.connect(link, "onclick", null, function(e){
            //do your stuff
        });
    });
    

    var link = dojo.byId("linkId"); //retrieves a reference to a DOM node with the given id
    dojo.connect(link, "onclick", null, function(e){
        //do you stuff
    });
    

    这里是dojo.connect的doc页面,它还解释了如何在对象销毁/页面卸载时清理事件处理程序: http://www.dojotoolkit.org/reference-guide/dojo/connect.html