为什么这个javascript工作......但这不是吗?

时间:2009-10-14 08:29:59

标签: javascript jquery

我在页面上加载了所有内容。 最后,我有这个脚本。

<script type="text/javascript">loadNewVideo('u1zgFlCw8Aw',0)</script>

它不起作用。 但如果我用它代替它,它就可以了。:

<input type="submit" onclick="loadNewVideo('u1zgFlCw8Aw',0);" >

在.JS文件中,这是函数:

function loadNewVideo(id, startSeconds) {
            alert('In-the-function');
          if (ytplayer) {
            alert('Found-ytplayer');
            ytplayer.loadVideoById(id, parseInt(startSeconds));
          }
        }

显然,“ytplayer”在第一个中是假的!??

3 个答案:

答案 0 :(得分:9)

我不知道ytplayer是什么,但我想这个问题与DOM没有完全加载有关。你试过这个吗?

<script type="text/javascript">
$(document).ready(function() {
  loadNewVideo('u1zgFlCw8Aw', 0);
});
</script>

编辑:如果这不起作用,您必须向我们提供更多信息。正如蒂姆和彼得在评论中问你的问题时,你能告诉我们ytplayer的定义在哪里以及它是什么?我假设它代表YouTube播放器,可能是在之后正在加载/定义你正在呼叫loadNewVideo

例如,如果上面的代码段位于文档中定义ytplayer的部分之上,则在加载ytplayer之前仍会调用此代码,具体取决于您加载它的方式。正如我所说,请提供更多信息。

答案 1 :(得分:4)

我想说这是因为DOM在那个阶段没有完全加载。你想挂钩正文onLoad事件,或使用jQuery来获取$(document).ready()钩子。

答案 2 :(得分:4)

我没有答案,但也许这可以帮助您找出 ytplayer 组件何时可以使用:

var startTimer = new Date().getTime();
function ytplayerReadyCheck() {
  var ready = !!ytplayer;
  if (!ready) {
    window.setTimeout(ytplayerReadyCheck,50);
  }
  else {
    var endTimer = new Date().getTime();
    alert('ytplayer is now ready!\n\nWe waited '+(endTimer-startTimer)+' milliseconds for it');
    loadNewVideo('u1zgFlCw8Aw', 0);
  }
}
ytplayerReadyCheck();

当然,这几乎无法取代首先定义 ytplayer 的位置!也许它是在.js文件中定义的,在文档加载后动态加载

我强烈建议您抓住Firebug,以便更轻松地调试此类内容。