Javascript onclick 事件在第一次点击后不起作用 - 随机报价生成器
Javascript onclick event doesn't work after the first click - random quote generator
我正在构建一个随机引语生成器,当我点击 'get a quote button' 它会随机生成一个引语,但在第一次点击后再次点击时它不会提供更多句子。
h这是我的代码:
html:
<h1>Random Quotes</h1>
<p>Press The below button to read a random quote</p>
<p id="demo"></p>
<div class="button" onclick="loopQuotes()">Get a quote</div>
<script type="text/javascript">
</script>
Javascript:
var quotes = [("Quote 1"), ('quote 2'), ('quote 3'), ('quote 4')];
var length = quotes.length;
var rand = Math.round(Math.random() * (length - 1));
function loopQuotes(){
for (var i = 0; i < quotes.length; i++ ) {
document.getElementById('demo').innerHTML = quotes[rand];
}
}
哪位好心人可以查一下,给个建议?
正如有人已经指出的那样,您的 rand
值不会再次生成。由于您调用了 loopQuotes
方法,它没有再次生成 rand
的逻辑。
尝试
function loopQuotes()
{
var rand = Math.round(Math.random() * (length - 1));
document.getElementById('demo').innerHTML = quotes[rand];
}
试试这个方法,因为你在函数外调用 Random
。
function loopQuotes(){
var length = quotes.length;
var rand = Math.round(Math.random() * (length - 1));
document.getElementById('demo').innerHTML = quotes[rand];
}
用下面的代码替换你的代码
var quotes = ["Quote 1", 'quote 2', 'quote 3', 'quote 4'];
var length = quotes.length;
function loopQuotes()
{
for (var i = 0; i < quotes.length; i++ )
{
var rand = Math.round(Math.random() * (length - 1));
document.getElementById('demo').innerHTML = quotes[rand];
}
}
这是因为您在函数之外生成随机变量。每当你将 JavaScript 放入 HTML 页面时,它只会得到一次 运行,并且只有 function
s 中的内容可以在以后成为 运行时间。因此,您应该将对 rand
的赋值放在函数体内:
function loopQuotes(){
var rand = Math.round(Math.random() * (quotes.length - 1));
for (var i = 0; i < quotes.length; i++ ) {
document.getElementById('demo').innerHTML = quotes[rand];
}
}
事实上,循环是没有意义的,因为 rand
没有改变,所以你可以去掉 for
循环,只保留里面的内容。如果你打算生成一个由多个引号拼凑而成的大而长的引号,你会想要做这样的事情,你将 rand
生成放在循环体内并添加到 innerHTML
字符串而不是替换它:
function loopQuotes(){
document.getElementById('demo').innerHTML = "";
var length = quotes.length;
for (var i = 0; i < length; i++ ) {
var rand = Math.round(Math.random() * (quotes.length - 1));
document.getElementById('demo').innerHTML += quotes[rand];
}
}
已更新 Fiddle - https://jsfiddle.net/3wuyo60p/
首先你需要生成0到length-1之间的数字。
其次,如果您计划在每次单击 "Get a Quote" div 时生成一个数字,则不需要循环。
<script type="text/javascript">
var quotes = [("Quote 1"), ('quote 2'), ('quote 3'), ('quote 4')];
function loopQuotes(){
var length = quotes.length;
var max = quotes.length - 1;
var min = 0;
var rand = Math.round(Math.random() * (max - min) + min );
//console.log(rand);
document.getElementById('demo').innerHTML = quotes[rand];
}
</script>
我正在构建一个随机引语生成器,当我点击 'get a quote button' 它会随机生成一个引语,但在第一次点击后再次点击时它不会提供更多句子。
h这是我的代码:
html:
<h1>Random Quotes</h1>
<p>Press The below button to read a random quote</p>
<p id="demo"></p>
<div class="button" onclick="loopQuotes()">Get a quote</div>
<script type="text/javascript">
</script>
Javascript:
var quotes = [("Quote 1"), ('quote 2'), ('quote 3'), ('quote 4')];
var length = quotes.length;
var rand = Math.round(Math.random() * (length - 1));
function loopQuotes(){
for (var i = 0; i < quotes.length; i++ ) {
document.getElementById('demo').innerHTML = quotes[rand];
}
}
哪位好心人可以查一下,给个建议?
正如有人已经指出的那样,您的 rand
值不会再次生成。由于您调用了 loopQuotes
方法,它没有再次生成 rand
的逻辑。
尝试
function loopQuotes()
{
var rand = Math.round(Math.random() * (length - 1));
document.getElementById('demo').innerHTML = quotes[rand];
}
试试这个方法,因为你在函数外调用 Random
。
function loopQuotes(){
var length = quotes.length;
var rand = Math.round(Math.random() * (length - 1));
document.getElementById('demo').innerHTML = quotes[rand];
}
用下面的代码替换你的代码
var quotes = ["Quote 1", 'quote 2', 'quote 3', 'quote 4'];
var length = quotes.length;
function loopQuotes()
{
for (var i = 0; i < quotes.length; i++ )
{
var rand = Math.round(Math.random() * (length - 1));
document.getElementById('demo').innerHTML = quotes[rand];
}
}
这是因为您在函数之外生成随机变量。每当你将 JavaScript 放入 HTML 页面时,它只会得到一次 运行,并且只有 function
s 中的内容可以在以后成为 运行时间。因此,您应该将对 rand
的赋值放在函数体内:
function loopQuotes(){
var rand = Math.round(Math.random() * (quotes.length - 1));
for (var i = 0; i < quotes.length; i++ ) {
document.getElementById('demo').innerHTML = quotes[rand];
}
}
事实上,循环是没有意义的,因为 rand
没有改变,所以你可以去掉 for
循环,只保留里面的内容。如果你打算生成一个由多个引号拼凑而成的大而长的引号,你会想要做这样的事情,你将 rand
生成放在循环体内并添加到 innerHTML
字符串而不是替换它:
function loopQuotes(){
document.getElementById('demo').innerHTML = "";
var length = quotes.length;
for (var i = 0; i < length; i++ ) {
var rand = Math.round(Math.random() * (quotes.length - 1));
document.getElementById('demo').innerHTML += quotes[rand];
}
}
已更新 Fiddle - https://jsfiddle.net/3wuyo60p/
首先你需要生成0到length-1之间的数字。
其次,如果您计划在每次单击 "Get a Quote" div 时生成一个数字,则不需要循环。
<script type="text/javascript">
var quotes = [("Quote 1"), ('quote 2'), ('quote 3'), ('quote 4')];
function loopQuotes(){
var length = quotes.length;
var max = quotes.length - 1;
var min = 0;
var rand = Math.round(Math.random() * (max - min) + min );
//console.log(rand);
document.getElementById('demo').innerHTML = quotes[rand];
}
</script>