获取其他函数内部变量的值 javascript
get the value of variable inside other function javascript
我在 "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" 中输入的电子邮件,请帮助我或建议我。
提前致谢!
如果您在 $(function()
之外声明 mail
变量,它将是一个 global variable 并且可以被所有 Javascript 代码访问。例如
var mail = "";
$(function(){
...
onPlayerReady = function(event) {
event.target.pauseVideo();
mail=prompt('email:'); // remove the var here
};
事实上,正如@nikhil 指出的那样,您甚至可以将它放在外部 function()
中(只要它在 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
变量,而不会出现上述缺点。
也可以参考这个post。
我在 "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" 中输入的电子邮件,请帮助我或建议我。 提前致谢!
如果您在 $(function()
之外声明 mail
变量,它将是一个 global variable 并且可以被所有 Javascript 代码访问。例如
var mail = "";
$(function(){
...
onPlayerReady = function(event) {
event.target.pauseVideo();
mail=prompt('email:'); // remove the var here
};
事实上,正如@nikhil 指出的那样,您甚至可以将它放在外部 function()
中(只要它在 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
变量,而不会出现上述缺点。
也可以参考这个post。