验证数组中是否存在元素

时间:2017-12-20 14:05:39

标签: javascript arrays datalist

我正在尝试开发一种算法,允许用户在文本字段中输入单词,如果该单词已存在于该数据列表中,则会向我发送已输入单词已存在的警报。

事实上,我的代码允许我这样做,除非我尝试从datalist中选择一个值,它会向我发送警报。

这是我的代码:

$("input[type='text'][name^='Q0']").change(function() {
  verif(this.value, this.id);
});

function verif(val, id) {
  if (val != "") {
    val = val.toLowerCase();

    //1.getting datalist values as an array :
    var array = $('datalist option').map(function() {
      return this.value;
    }).get();

    //2.Checking if string exist in datalist:      
    for (var i = 0; i < array.length; i++) {
      if (val.indexOf(array[i]) != -1) {
        console.log("le mot existe dans la liste");  // alert("...") replaced with console.log()
        document.getElementById(id).value = "";
      }
    }
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<input type="text" name="Q0" id="Q0_98" autocomplete="off" list="Q0_98_List" size="100%" />
<datalist id="Q0_98_List">
  <option value="valeur 1"></option>
  <option value="valeur 2"></option>
  <option value="valeur 3"></option>
</datalist>
</br>
<input type="button" value="PRECEDENT" />
<input type="button" value="SUIVANT" />

你能帮我吗?

1 个答案:

答案 0 :(得分:-1)

而不是if条件:

if (val.indexOf(array[i]) != -1) {
    //...
}

尝试:

if (array[i] !== val) {
    //...
}

如果您只想检查数组中的礼物,我认为您也可以避免循环。您可以使用:

if (array.indexOf(val) === -1) {
    //...
}

<强>更新

没有for循环的完整代码和向datalist添加新选项的逻辑是:

$("input[type='text'][name^='Q0']").change(function () {
    verif(this.value, this.id);
});

function verif(val, id) {
    if (val !== "") {
        var datalist;

        // Caching datalist jQuery Object
        datalist = $("datalist");

        val = val.toLowerCase();

        // Array of actual options
        var array = datalist.find("option").map(function () {
            return this.value;
        }).get();

        // Append the new option
        if (array.indexOf(val) === -1) {
            datalist.append($("<option>", {
                value: val,
                text: val
            }));
        } else {
            alert("Word already entered.");
        }

        // Empty the input
        document.getElementById(id).value = "";
    }
}