我正在尝试开发一种算法,允许用户在文本字段中输入单词,如果该单词已存在于该数据列表中,则会向我发送已输入单词已存在的警报。
事实上,我的代码允许我这样做,除非我尝试从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" />
你能帮我吗?
答案 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 = "";
}
}