2013-10-28 90 views
1

我有一个应用程序与几个js库。在其中的一个中,我为顶部的html5音频定义了一个变量。然后我有一个函数被调用,加载一些html并将其放入div中。该HTML包含一个我想点击播放音频的按钮。然后我使用全局定义的“myaudio”变量加载音频。结构是这样的:Javascript库范围混乱

var myaudio = null; 

function loadPage() { 

    $.ajax({url:'myurl', 
     success: function(myhtml) { 
      $('#mydiv').html(myhtml); 

      ... and then later.... 


      if (!editor && audiofile.length) { 
       var soundfile = "/media/audio/"+thisuid+"/sceneaudio/"+audiofile; 
       myaudio = new Audio(soundfile).load(); 
       $('#audioButton').css('display','block'); 
       $('#audioButton').click(function() { myaudio.play(); }); 
      } 
     } 
    }); 
} 

一切正常,除非当我点击按钮,我得到'myaudio未定义'的错误。我认为这是由于范围问题。当我点击并有效回拨时,myaudio不在通话范围内。这是一个正确的假设吗?我怎样才能解决这个问题?

我试着把jquery点击在函数之外,并使用jquery .on指令,但得到了相同的结果。

谢谢。

+0

我无法让你列出与你所引用的代码相匹配的症状,就可以产生一个完整的,自成体系,最小的例子(例如[SSCCE](http://sscce.org))? –

+0

*“...当我点击按钮时,出现'myaudio undefined'错误,我认为这是由于范围问题。当我点击并有效回拨时,myaudio不在通话范围内。这是一个正确的假设吗?“不,从你引用的代码中,”myaudio“是一个全球性的。 –

+0

定义音频“类”在哪里? .load()函数返回什么?它在你看来像你_think_你正在分配一个新的音频实例,当你真的分配可能是未定义的.load()的返回值。 –

回答

0

我不是完全肯定,但也许你可以试试这个:

myaudio = new Audio(soundfile) 
myaudio.addEventListener('canplaythrough', function() { 
      $('#audioButton').css('display','block'); 
      $('#audioButton').click(function() { myaudio.play(); }); 
},false) 
+0

防御模式是在尝试调用'myaudio'之前首先测试'play'方法。但当然,连锁电话会阻止这种情况。 – RobG