jquery indexOf找不到我想阻止的名字

时间:2015-02-12 00:38:33

标签: javascript jquery

好吧所以我有一个输入,并且我试图使它成为当输入特定名称时,它会发出警报和e.off()。我不知道为什么这段代码不起作用。代码是在函数中,但没关系,我只是在这里遇到问题谢谢。 html输入确实有#nameInput的id,所以我们也可以。

var name = $('#nameInput').val();
      var names = ["john","jon","johnn"];
      var a = names.indexOf("john","jon","johnn") > -1;

      if (name == a) {
        alert('That is the Bosses name silly!');
        e.off();
      }

3 个答案:

答案 0 :(得分:3)

.indexOf()函数不是jQuery的东西;它是(现代)标准JavaScript的一部分。它需要一个参数和一个可选参数。第一个是要搜索的东西,第二个可选参数是搜索的起始位置(默认为索引0)。

该函数返回一个数字,正如您的代码所期望的那样。但是,您可以将输入字段中的名称与您对true的(错误)调用后的比较返回的false / .indexOf()进行比较,因此,这并不奇怪它没有做你期望的事。

答案 1 :(得分:1)

var name = $('#nameInput').val();
var names = ["john","jon","johnn"];

var bad_name = false;
for(var k in names) {
  var this_name = names[k];
  if( name.indexOf(this_name) > -1 ) {
    bad_name = true;
    break;
  }  
}

if(bad_name) {
  alert('That is the Bosses name silly!');
  e.off();
}

.indexOf使用不当。它被调用的对象应该是name字符串,而不是名称列表,它只需要一个参数,所以你必须做多次检查。

此外,a值将是布尔值,因此您直接检查其值,而不是将其与name进行比较

答案 2 :(得分:0)

如果所有这些都在一个函数中,请考虑在其外部使用另一个函数,以便以后可以在需要时重用它。您需要遍历与字符串匹配的名称数组与数组的项目。有很多方法可以做到,但这里很容易。



function isName(inputName, namesArray) {
  var nameFound = false;  //  Returns false if there's no match

  namesArray.forEach(function(name) {  // For each name in namesArray
    if (inputName === name) {
      nameFound = true;
    }
  });

  return nameFound;
}

console.log(isName('john', ['john', 'jon', 'johnn']));
console.log(isName('nobody', ['john', 'jon', 'johnn']));

// You can then have your if statement
if(isName(name, names)) {
    alert('That is the Bosses name silly!');
    e.off();
}