【问题标题】:get the value of variable inside other function javascript获取其他函数javascript中的变量值
【发布时间】:2015-07-11 08:25:39
【问题描述】:

我在“onPlayerReady”中有一个变量“mail”,其中我有电子邮件地址,我想在“onPlayerStateChange”中调用这个变量,以便我可以将值传递给“input.php”页面以将其保存到数据库中.

$(function(){
  var youtubePlayer;
  var myWindow = window;
  var vid_id='ha48nSKLLh8';
  onYouTubeIframeAPIReady = function(){
   youtubePlayer = new YT.Player('youtube', {
     height: '390',
     width: '640',
     videoId: vid_id,
     events: {
       'onReady': onPlayerReady,
       'onStateChange': onPlayerStateChange
     }
   });
   }

  onPlayerReady = function(event) {
   event.target.pauseVideo();
   var mail=prompt('email:'); //this is the variable mail i am talking about i want the value if this variable inside onPlayerStateChange


   };


  onPlayerStateChange = function(event) {

   if (event.data == 1) {
       var tm = youtubePlayer.getCurrentTime();
       var st = youtubePlayer.getPlayerState();
       //$("#status1").text(tm);    


       $("#status1").text(st);
       $.ajax({
        type: 'POST',
        url: 'input.php',
        data:{ tm: tm, vid_id: vid_id,mail:mail},   
        success:function(html){
           alert(done);

        }
    });

       //$("#status1").text(tm);

     $("#status").text("Playing!");
     myWindow.focus();
     myWindow.onblur = function() {
       $("#status").text("You went away!");
       youtubePlayer.stopVideo();
     };
   }

  };

  youtubeplayer.bind('play',function(){
      youtubeplayer.time(60);
      return this.unbind;
  });
})

如果有任何其他方法可以保存在“onPlayerReady”中输入的电子邮件,请帮助我或建议我。 提前致谢!

【问题讨论】:

  • 您可以像实现 youtubePlayer 一样实现这一点

标签: javascript php youtube-api youtube-javascript-api


【解决方案1】:

我建议在闭包中声明 mail 变量,如果没有必要,不要声明为全局变量,即:

$(function(){
    var mail = null; // not a global, but available in the entire function scope.
    var youtubePlayer;
    var myWindow = window;
    ...

细微差别是现在没有其他代码可能覆盖mail 变量(反之亦然),因此没有命名冲突。 最好在 javascript 中尽可能避免使用全局变量。

只需确保不要在 onPlayerReady() 中重新定义您的 mail 变量:

onPlayerReady = function(event) {
   event.target.pauseVideo();
   mail = prompt('email:'); // Only store the prompt input (i.e no var).
};

这样你仍然可以在你的 ajax 请求中访问 mail 变量,而没有上面提到的缺点。

也可以参考post。

【讨论】:

    【解决方案2】:

    如果您在$(function() 之外声明mail 变量,它将是一个global variable,并且可以由您的所有Javascript 代码访问。例如

    var mail = "";
    $(function(){
        ...
    
        onPlayerReady = function(event) {
            event.target.pauseVideo();
            mail=prompt('email:'); // remove the var here
        };
    

    事实上,正如@nikhil 所指出的,您甚至可以将它放在外部function() 内(只要它在onPlayerReady 函数之外)。

    【讨论】:

    • 我想在同一代码中使用 seekto() 一段时间后开始播放视频!谁能帮我解决这个问题?
    • 如果您有一个新问题,请发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2013-04-06
    • 2012-08-02
    相关资源
    最近更新 更多