JavaScript随机化函数不在HTML上下文中工作,但在外部工作

JavaScript随机化函数不在HTML上下文中工作,但在外部工作,javascript,jquery,html,Javascript,Jquery,Html,简而言之:作为一个独立的函数,我的随机化器可以工作。当与HTML和jQuery结合在一起时,它不起作用 详情: 我正在构建一个“随机发生器”——一个HTMLinput从用户那里获取多个单词,这些单词由空格隔开。比如说,它有5,7,10,30个单词。然后,它随机地将这些单词中的三个返回给用户 其思想是,用户输入是由多个单词组成的单个字符串。然后,代码(应该)将字符串分解为一个字符串数组(使用.split),并将这个新数组分配给另一个变量。然后,这个新创建的数组创建另一个新数组,它只有三个随机选择的

简而言之:作为一个独立的函数,我的随机化器可以工作。当与HTML和jQuery结合在一起时,它不起作用

详情: 我正在构建一个“随机发生器”——一个HTML
input
从用户那里获取多个单词,这些单词由
空格隔开。比如说,它有5,7,10,30个单词。然后,它随机地将这些单词中的三个返回给用户

其思想是,用户输入是由多个单词组成的单个字符串。然后,代码(应该)将字符串分解为一个字符串数组(使用
.split
),并将这个新数组分配给另一个变量。然后,这个新创建的数组创建另一个新数组,它只有三个随机选择的单词。最后,最后一个数组是用户单击按钮后应该看到的

我用Atom编写代码,将HTML/CSS/JS保存在笔记本电脑(Mac)的本地文件中,然后在Chrome上运行

我使用的是jQuery 3.3.1。来自CDN

问题的性质: 当HTML和JS一起运行时,随机化器不起作用——点击几个按钮后,我碰巧得到两个相同的单词,应该是这样的。不应该是这样,因为当我使用一个变量测试JS代码时,我不会遇到同样的问题,我在一个字符串中为该变量分配了几个不同的单词。我猜想当jQuery获得用户输入时会发生一些事情。但是,我完全不确定

我已经为此奋斗了两天了。我想尽一切办法

问题是我通过jQuery事件监听器链接JS函数和HTML代码的方式吗

或者我的函数本身写得不好

HTML/JS/jQuery代码如下:

//这里开始jQuery代码
$(文档).ready(()=>{
让$button=$('.button');
让$userInput=$(“#userInputField”);
让$userOutput=$('.userOutput');
$button.on('单击',()=>{
var b=document.getElementById('userInputField')。值;
var a=所有事情(b);
$userOutput.text(a);
});
}); // jQuery代码到此结束。
//------------------------------------------------------------------------------------------------------------------------
//下面开始JavaScript代码
var coolWords=[];
函数执行所有操作(收敛){
var bString=aString.split(“”);
var finalResult=[];
for(设i=0;i

魔术

测试


这是更新后的代码,可以作为代码片段使用

不幸的是,localStorage在代码段中被阻塞,。。但是将其存储在localStorage中的更改应该不会太难

更新:另外,如果您查看我在localStorage上注释掉的行,它们应该是使您的单词在用户返回时持久化所需要的

//这里开始jQuery代码
$(文档).ready(()=>{
让$button=$('.button');
让$userInput=$(“#userInputField”);
让$userOutput=$('.userOutput');
$button.on('单击',()=>{
var b=document.getElementById('userInputField')。值;
var a=所有事情(b);
$userOutput.text(a);
});
}); // jQuery代码到此结束。
//------------------------------------------------------------------------------------------------------------------------
//下面开始JavaScript代码
//var saved=localStorage.getItem(“已保存”)||“[]”;
var saved=“[]”;
var coolWords=JSON.parse(已保存);
函数执行所有操作(收敛){
var bString=aString.split(“”);
var finalResult=[];
for(设i=0;i

魔术

测试


您的随机发生器功能看起来不错。也许您还应该添加一个重复单词的检查。@TheodorB-但这不正是
.splice
的作用吗?对于每个迭代,它从
newList
中获取一个单词,并将其保存在
hey
中。对吗?好的,问题来自var coolWords=[],确保在doEverything函数中重置它(coolWords=[])。去掉测试用的
,并添加几个包含示例输入的变量。首先开发和测试这些。还允许其他人快速运行您的代码,并让您缩小bug的范围。要了解如何创建一个函数,您可以使用
aString.split(“”)
创建数组,只需迭代此数组并将其添加到名为
coolWords
,。然后进行克隆,并从中随机选择。为什么不从您的原始
中随机选择拆分
并完成?感谢您的代码!事实上,我的灵感来自于将代码减少到只有一个循环和两个数组,而不是4个数组,从而完成所有任务而不出现任何问题D关于JSON部分,我将在这些日子里进行更多的研究,看看它如何适应更大的前景。