【问题标题】:Asigning an anonymous function to CLICK event将匿名函数分配给 CLICK 事件
【发布时间】:2012-12-03 17:41:39
【问题描述】:

这是一个demo
如果用户点击红色箭头,我想跳到相关视频。
下面有原始的播放列表渲染功能,与演示中的功能不同。修改原始函数的最简单方法,用我的红色箭头 url 替换 img.src= 值。但这不是最聪明的方法,因为箭头图像不是动态变化的。那么,如何让用户通过点击红色箭头跳转到相关视频呢?

 function ytplayer_render_playlist( )
  {
    for ( var i = 0; i < ytplayer_playlist.length; i++ )
    {
      var img = document.createElement( "img" );
      img.src = "http://img.youtube.com/vi/" + ytplayer_playlist[ i ] + "/default.jpg";
      var a = document.createElement( "a" );
      a.href = "#ytplayer";

      a.onclick = (
        function( j )
        {
          return function( )
          {
            ytplayer_playitem = j;
            ytplayer_playlazy( 1000 );
          };
        }
      )( i );
      a.appendChild( img );
      document.getElementById( "ytplayer_div2" ).appendChild( a );
    }
  }

【问题讨论】:

    标签: javascript closures youtube-api anonymous-function


    【解决方案1】:

    您没有将值 j 传递给下一个函数。

      a.onclick = (
        function( j )
        {
          return function( j )
          {
            ytplayer_playitem = j;
            ytplayer_playlazy( 1000 );
          };
        }
      )( i );
    

    但是,我看不出第二个函数和 (i); 的充分理由;最后可能需要修剪,我认为它没有做任何事情。

     a.onclick = (
        function( j )
        {
            ytplayer_playitem = j;
            ytplayer_playlazy( 1000 );
        }
      );
    

    【讨论】:

    • j 应该在范围内可用。并将要返回的函数包装在另一个函数中可以保护和清理本地符号表,因此在返回每个调用时它是一个干净的引用...
    • 尾随的( i ) 将参数传递给创建所需匿名的匿名...
    • 你的第二条评论听起来很有趣,你有我可以用谷歌搜索的术语或我可以查看的链接吗?欢呼
    • 不知道叫什么。但是,分配给 a.onclick 的值是一个带有参数 (i)...与下次调用 anon 时不同的父状态...也许可以查看编译器理论中的符号表。
    • 啊...第二条评论...一个常见的实现是包装 jquery 以便它可以在 noconflict active 的情况下工作...(function($) { /* some code that uses $ */ })(jQuery) 将 jquery 传递给变量 $ 中的匿名函数在函数中使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多