2015-07-11 75 views
0

我在“onPlayerReady”里面有一个变量“onPlayerReady”,里面有电子邮件地址,我想在“onPlayerStateChange”里面调用这个变量,这样我就可以将值传递给'input .php'页面将其保存到数据库中。获取其他函数内部变量的值javascript

$(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”输入的电子邮件。 在此先感谢!

+0

您可以通过与获得youtubePlayer相同的方式实现此目标 – nikhil

回答

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). 
}; 

而且这种方式,您仍然可以访问mail变量中,你Ajax请求没有上述缺点。

同样供参考,请检查这个post

+0

谢谢@Danillouz。 – Rajeet

0

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

var mail = ""; 
$(function(){ 
    ... 

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

事实上,作为@nikhil指出的那样,你甚至可以把它外function()内(只要它是onPlayerReady功能之外)。

+0

我想在相同的代码中使用seekto()以在某个时间后启动视频!谁能帮我这个? – Rajeet

+0

如果您*有*一个新问题,请*发布*一个新问题。 – Glorfindel