[英]Javascript variables scope and use in JQuery
我对javascript和jquery的了解很少,但是我能够将以下代码放在一起。
当我单击html页面上的“ nameCreationButton”按钮时,我想将“名称”的结果添加到html页面上的div“ displayName”中。 当我单击“ nameCreationButton”时,绝对没有任何反应。
我在函数“ generator”之外声明了变量“ name”,因此我的jquery应该能够访问它,对吗? 我花了几个小时研究这个问题,但由于不理解为什么它不起作用而感到愚蠢。
function generator(){
var firstName = ["John","Mike","Robert","Patrick"];
var lastName = ["Smith","Johnson","Williams","Anderson"];
var randomNumber1 = parseInt(Math.random() * firstName.length);
var randomNumber2 = parseInt(Math.random() * lastName.length);
var name = firstName[randomNumber1] + " " + lastName[randomNumber2];
}
var name;
generator();
$(document).ready(function(){
$(".nameCreationButton").click(function(){
$(".displayName").append('name');
});
});
这是我的HTML页面(如果有什么用)。
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='style.css'/>
<script type= 'text/javascript' src='nameGenerator_JS.js'></script>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
</head>
<body>
<button class = "nameCreationButton">Click Here to Generate Name</button>
<div class = "displayName"></div>
</body>
</html>
两次声明变量name
绝对没有意义。 您只能在generator()
内部执行一次,并且要作为全局一次执行,这不是一个好主意。
相反,您想要的是在单击按钮后执行函数generator()
。 此函数需要返回name
。
要重写此:
function generator(){
var firstName = ["John","Mike","Robert","Patrick"],
lastName = ["Smith","Johnson","Williams","Anderson"],
randomNumber1 = parseInt(Math.random() * firstName.length, 10),
randomNumber2 = parseInt(Math.random() * lastName.length, 10);
return firstName[randomNumber1] + " " + lastName[randomNumber2];
}
$(function(){
$(".nameCreationButton").click(function(){
//var name = generator();
$(".displayName").append(generator());
});
});
您需要删除单'
上的引号append('name')
而且,您还需要在generator
function
删除name
变量的var
声明。 generator
块内的变量var name
({...})使变量仅在该块内可见。 因此,在原始代码上,您将拥有两个不同的变量,它们的name
分别为name
和两个不同的作用域。
尝试:
function nameGenerator(){
var firstName = ["John","Mike","Robert","Patrick"];
var lastName = ["Smith","Johnson","Williams","Anderson"];
var randomNumber1 = parseInt(Math.random() * firstName.length);
var randomNumber2 = parseInt(Math.random() * lastName.length);
return firstName[randomNumber1] + " " + lastName[randomNumber2];
}
$(document).ready(function(){
$(".nameCreationButton").click(function(){
var name = nameGenerator();
$(".displayName").text(name);
});
});
(*)您为变量加上了引号,它将被视为字符串
var name = "aslan";
console.log(name) //=> aslan
console.log("name") //=> name
(*)同样,变量名在函数内部和外部声明。 在函数内部声明的变量被视为局部变量,因此在函数外部声明的var名称不会得到更新,我们使用了append()。 检查: http : //snook.ca/archives/javascript/global_variable
将代码更改为:
function generator(){
var firstName = ["John","Mike","Robert","Patrick"];
var lastName = ["Smith","Johnson","Williams","Anderson"];
var randomNumber1 = parseInt(Math.random() * firstName.length);
var randomNumber2 = parseInt(Math.random() * lastName.length);
return firstName[randomNumber1] + " " + lastName[randomNumber2];
}
$(document).ready(function(){
$(".nameCreationButton").click(function(){
$(".displayName").append( generator() );
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.