文本输入值有时不会更改,即使它没有错误,并且似乎有效

Text Input Value sometimes does't change even though it thows no errors, and seems to work

本文关键字:有错误 有效 文本 输入      更新时间:2023-09-26

所以我有一个简单的程序,每次模糊输入字段时都会更改输入字段的值。它将已经使用的值记录在一个数组中,我使用该数组来检查它是否已被使用。它实际上按预期工作,但经过几次尝试后,它将返回 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,此时再次调用它将不执行任何操作。实际上,比没有更糟糕的是 - 它会无休止地递归地称呼自己。