Javascript 设置自动完成输入字段显示值与实际值不同
我的表单中有一个文本字段,用这个字段填充。当从自动完成建议中选择一个值时,我希望字段中填充建议中显示的值(存储在数组Javascript 设置自动完成输入字段显示值与实际值不同,javascript,forms,autocomplete,Javascript,Forms,Autocomplete,我的表单中有一个文本字段,用这个字段填充。当从自动完成建议中选择一个值时,我希望字段中填充建议中显示的值(存储在数组arr),但我希望在提交表单时随POST请求一起提交另一个值(存储在数组arr2) 守则: b.innerHTML += "<input type='hidden' value = '" + arr[i] + "'>"; b.addEventListener("click", function(e) { inp.value = this.getElementsB
arr
),但我希望在提交表单时随POST请求一起提交另一个值(存储在数组arr2
)
守则:
b.innerHTML += "<input type='hidden' value = '" + arr[i] + "'>";
b.addEventListener("click", function(e) {
inp.value = this.getElementsByTagName("input")[0].value;
closeAllLists();
});
a.appendChild(b);
2) 我尝试将value属性直接设置为arr2
中的值,但单击建议后,输入字段将填充必须传递的值,而不是必须显示的值。代码如下:
b.innerHTML += "<input type='hidden' value = '" + arr2[i] + "'>";
b.addEventListener("click", function(e) {
inp.value = this.getElementsByTagName("input")[0].value;
closeAllLists();
});
a.appendChild(b);
b.innerHTML+=”;
b、 addEventListener(“单击”,函数(e){
inp.value=this.getElementsByTagName(“输入”)[0].value;
closeAllList();
});
a、 儿童(b);
创建一个新的隐藏字段,该字段将保存必须传递的值,并在以后对其进行处理
c = document.createElement("DIV");
c.innerHTML = "<input type='hidden' value = '" + arr2[i] + "' name = 'newID'>";
this.parentNode.appendChild(c);
c=document.createElement(“DIV”);
c、 innerHTML=“”;
this.parentNode.appendChild(c);
我认为在数据相关时使用两个独立的数组不是一个好主意。我更喜欢成对思考。因此,我使用arr(以及W3CSchools示例中的国家)作为JSON,并使用:
var countries = {
"Afghanistan": "af",
"Algeria": "al",
"República Argentina": "ar",
"Belgium": "be",
"Chile": "ch",
};
这就是将arr
作为键,将arr2
作为值
对象。键(国家)
将是第二个的数组。自动完成函数的参数。在通话中:
autocomplete(document.getElementById("myInput"), Object.keys(countries));
提交时(onSubmit
),可以将值分配给隐藏字段,该字段必须具有name
属性
<form [...] onsubmit="prepareData()" >
我将此应用于W3CSchools示例,下面是一个工作示例
函数getCountry(){
//我只是提醒这个值,这个代码段不会出现在任何地方
警报(国家[document.getElementById(“myInput”).value]);
}
功能自动完成(inp、arr){
/*autocomplete函数接受两个参数,
文本字段元素和可能的自动完成值对的json(数组):*/
无功电流聚焦;
/*当有人在文本字段中写入时执行函数:*/
inp.addEventListener(“输入”,函数(e){
var a,b,i,val=该值;
/*关闭所有已打开的自动完成值列表*/
closeAllList();
如果(!val){返回false;}
currentFocus=-1;
/*创建将包含以下项(值)的DIV元素:*/
a=document.createElement(“DIV”);
a、 setAttribute(“id”,this.id+“自动完成列表”);
a、 setAttribute(“类”、“自动完成项”);
/*将DIV元素作为自动完成容器的子元素追加:*/
this.parentNode.appendChild(a);
/*对于数组中的每个项*/
对于(i=0;i<form [...] onsubmit="prepareData()" >
function prepareData() {
document.getElementById("myHiddenField").value = countries[document.getElementById("myInput").value];
}