我有2个javascript。我试图将它们组合但失败了。第一部分随机创建文本,第二部分替换标题文本。
问题是创建组合代码,以便用随机生成的文本替换标题。基本上连接这两个代码:
第一个Javascript:
document.addEventListener("DOMContentLoaded", init, false);
function init() {
generate();
var enterButton = document.getElementById("haikuButton");
enterButton.addEventListener("click", generate);
}
var prevRandom;
function generate() {
var threeS = [
/* ------------------------------------------------------- */
"Some text",
/* ------------------------------------------------------- */
"Some text 2", ];
var rand;
do {
rand = Math.floor(Math.random() * threeS.length);
} while (rand === prevRandom);
prevRandom = rand;
document.getElementById("words").innerHTML = threeS[rand];
var input = document.getElementById('id_name').getElementsByTagName('input')[0];
input.value = threeS[rand];
}
第二个代码:
..
<script type="text/javascript">
function changeTitle(title) { document.title = title; }
</script>
..
<input type='button' onclick='changeTitle("new title")' value='Change Title'/>
答案 0 :(得分:1)
看起来你可能有困难,因为你的功能 generate
实际上并不return
任何东西;它设定然后结束。
这意味着要解决您的问题,您可以执行以下选项之一
generate
返回而不进行设置,而另一个(新)函数设置包括文档标题在内的内容。changeTitle(threeS[rand])
添加到generate
的末尾,这需要在调用第一个脚本之前正确加载第二个脚本。foo
,然后调用changeTitle(foo)
在我的意见中,最好重构代码,以便您拥有更通用的功能。
function generate() {
var threeS = [/* etc */], rand;
rand = Math.floor(Math.random() * (threeS.length - 1));
if (rand >= prevRandom) // no loop, always a different value
rand = (rand + 1) % threeS.length;
prevRandom = rand;
return threeS[rand];
}
function makeFieldsRandom() {
var val = generate(),
words = document.getElementById("words"),
id_name = document.getElementById('id_name'),
input = id_name.getElementsByTagName('input')[0];
words.innerHTML = val;
input.value = val;
document.title = val;
}
然后调用makeFieldsRandom
而不是其他任何
答案 1 :(得分:0)
设置rand变量后,只需调用第一个函数: http://jsbin.com/yugututa/2/edit