我在"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"输入的电子邮件。提前感谢!
如果没有必要,我建议在闭包中声明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
变量,而不会出现上面提到的缺点。
如果在$(function()
之外声明mail
变量,它将是一个全局变量,并且可以被所有Javascript代码访问。例如
var mail = "";
$(function(){
...
onPlayerReady = function(event) {
event.target.pauseVideo();
mail=prompt('email:'); // remove the var here
};
事实上,正如@nikhil所指出的,您甚至可以将其放在外部function()
中(只要它在onPlayerReady
函数之外)。