文本输入值有时不会更改,即使它没有错误,并且似乎有效
Text Input Value sometimes does't change even though it thows no errors, and seems to work
所以我有一个简单的程序,每次模糊输入字段时都会更改输入字段的值。它将已经使用的值记录在一个数组中,我使用该数组来检查它是否已被使用。它实际上按预期工作,但经过几次尝试后,它将返回 true 并记录,但值不会更改。
更新的代码:
var dftvalue = ['Freddy the Grocer', 'Jack the Fiddler', 'Cane the Sheep Herder', 'Arnold the Fish Monger', 'Luke the Car Salesman', 'Josh the Tailor', 'Carol the Baker', 'Tiara the Nacho Vendor', 'example@email.com', 'Your message here.'];
var logused = new Array(); //create new array to log the used indexs
function setdftvalue() {
var newval = dftvalue[Math.floor(Math.random() * 7)];
if (logused.indexOf(newval) == -1) {
this.value=newval;
logused.push(newval);
console.log(logused);
} else if (logused.indexOf(newval) >= 0) {
setdftvalue();
}
if (logused.length == 8) {
for (i=0; i<=7; i++){
logused.pop();
}
}
}
document.getElementById('formname').onblur=setdftvalue;
吉斯菲德尔https://jsfiddle.net/e5pdz37e/8/
你的方法过于复杂。在高层次上,我会推荐一种更像这样的方法:
function setdftvalue() {
if (index === (dftvalue.length - 1)) {
// Shuffle your names array
index = -1;
}
input.value = dftvalue[++index];
}
这样,您就不需要使用任何递归并进行不必要的函数调用。唯一需要随机化的时间是当你用完所有可用的名字时。
下面是一个工作示例:http://jsfiddle.net/bvaughn/163mqdeL/
原答案
经过几次调用后,您的函数将填满 logused
Array,此时再次调用它将不执行任何操作。实际上,比没有更糟糕的是 - 它会无休止地递归地称呼自己。
相关文章:
- 回复'js'仅当请求有错误时(否则使用html)
- 表单已发送,但验证有错误
- 如果文件不存在,fs.watch是否有错误处理程序
- Meteor上有错误的同步问题
- 表单验证:如果有错误,不要't使手风琴动起来
- 我有错误文档.注册元素未被细化
- 如何转换为特定于 json 的类 c#?我有错误
- 如果当前输入有错误或警告,则禁用所有下一个表单输入字段
- 通过有错误的 Ajax-Request 打印出 HTML 会阻止进一步的 JS 工作
- 脸书应用程序有错误
- XDomainRequest 总是有错误
- HTML5 Canvas游戏有错误,点击时第一个拼图块会变成不同的块
- Page_ClientValidate返回 false,但没有一个验证器有错误
- 我有一个有效的 JSON,但我不断收到“语法错误 json.parse 第 1 行意外的数据结尾”
- 我正在尝试在大范围内挑选特定单元格中带有“1”的所有行,是否有更有效的方法可以做到这一点
- 使用jQuery解析XML文档,有没有有效的方法
- 量角器由中继器命令中是否有错误
- Jquery 验证器 - 表单被保存但有错误
- 角度ng重复和过滤器错误(版本1.1.5有效,1.2.15有错误)
- JavaScript Birt-Try-catch有效,但仍有错误