Javascript 如何使用参数调用回调函数?

Javascript 如何使用参数调用回调函数?,javascript,html,wikipedia,wikipedia-api,Javascript,Html,Wikipedia,Wikipedia Api,我目前正在使用Wikipedia进行简单搜索,我有一个下拉列表和一个带有自动完成功能的简单输入 我试图做的是能够在不同的语言中搜索,自动完成可以很好地使用不同的语言,但是当我试图通过点击我的自动完成链接进行搜索时,它返回“未定义”。(例如,undefined.wikipedia.org而不是en.wikipedia.org) 以下是我迄今为止所做的尝试: //选择id的函数 变量yb={ id:函数(str){ 返回文档.getElementById(str); }, }; var tag=“

我目前正在使用Wikipedia进行简单搜索,我有一个
下拉列表和一个带有自动完成功能的简单输入

我试图做的是能够在不同的语言中搜索,自动完成可以很好地使用不同的语言,但是当我试图通过点击我的自动完成链接进行搜索时,它返回“未定义”。(例如,
undefined.wikipedia.org
而不是
en.wikipedia.org

以下是我迄今为止所做的尝试:

//选择id的函数
变量yb={
id:函数(str){
返回文档.getElementById(str);
},
};
var tag=“”;
//当用户输入时
yb.id(“搜索”).onkeyup=函数(e){
如果(!e.keyCode.toString().match(/^(37 | 38 | 39 | 40 | 13 | 16 | 17 | 18 | 224)$/){
如果(标记!==“”){
document.body.removeChild(标签);
}
tag=document.createElement(“脚本”);
var term=yb.id(“搜索”).value;
var lang=yb.id(“lang”)值;
//API链接
tag.src=
“https://“+lang+”.wikipedia.org/w/api.php?action=opensearch&limit=10&format=json&callback=ybComplete&search=”+
学期
document.body.appendChild(标签);
}
};
//搜索功能
功能完成(数据、语言){
yb.id(“wikiOutput”).innerHTML=“”;
对于(变量i=0;i<5;i++){
如果(数据[1][i]){
id(“wikiOutput”).innerHTML+=
“
”+ 资料[2][i]+ “

”; } } }

语言
英语
法语

不要传递lang。从选择按钮获取它

这里有一个更好的版本,当您更改语言时,它会重新进行搜索

//选择id的函数
变量yb={
id:函数(str){
返回文档.getElementById(str);
},
};
设keyupEvent=新事件(“keyup”);
让wiki=”https://en.wikipedia.org/w/api.php?action=opensearch&limit=10&format=json&callback=ybComplete&search="
让标签=”;
//当用户输入时
yb.id(“搜索”).addEventListener(“键控”,函数(e){
如果(!e.keyCode | | |!e.keyCode.toString().match(/^(37 | 38 | 39 | 40 | 13 | 16 | 17 | 18 | 224)$/){
如果(标记!==“”){
document.body.removeChild(标签);
}
tag=document.createElement(“脚本”);
const term=yb.id(“搜索”).value;
//API链接
tag.src=wiki+encodeURIComponent(术语);
document.body.appendChild(标签);
}
});
yb.id(“lang”).addEventListener(“更改”,函数(){
wiki=wiki.replace(/[a-z]{2}\.wikipedia\.org/,this.value+“.wikipedia.org”)
yb.id(“搜索”).dispatchEvent(keyupEvent)
})
//搜索功能
功能完成(数据){
yb.id(“wikiOutput”).innerHTML=“”;
常量lang=yb.id(“lang”).value
对于(变量i=0;i<5;i++){
如果(数据[1][i]){
id(“wikiOutput”).innerHTML+=
“
”+ 资料[2][i]+ “

”; } } }

语言
英语
法语

不要传递lang。从选择按钮获取它

这里有一个更好的版本,当您更改语言时,它会重新进行搜索

//选择id的函数
变量yb={
id:函数(str){
返回文档.getElementById(str);
},
};
设keyupEvent=新事件(“keyup”);
让wiki=”https://en.wikipedia.org/w/api.php?action=opensearch&limit=10&format=json&callback=ybComplete&search="
让标签=”;
//当用户输入时
yb.id(“搜索”).addEventListener(“键控”,函数(e){
如果(!e.keyCode | | |!e.keyCode.toString().match(/^(37 | 38 | 39 | 40 | 13 | 16 | 17 | 18 | 224)$/){
如果(标记!==“”){
document.body.removeChild(标签);
}
tag=document.createElement(“脚本”);
const term=yb.id(“搜索”).value;
//API链接
tag.src=wiki+encodeURIComponent(术语);
document.body.appendChild(标签);
}
});
yb.id(“lang”).addEventListener(“更改”,函数(){
wiki=wiki.replace(/[a-z]{2}\.wikipedia\.org/,this.value+“.wikipedia.org”)
yb.id(“搜索”).dispatchEvent(keyupEvent)
})
//搜索功能
功能完成(数据){
yb.id(“wikiOutput”).innerHTML=“”;
常量lang=yb.id(“lang”).value
对于(变量i=0;i<5;i++){
如果(数据[1][i]){
id(“wikiOutput”).innerHTML+=
“
”+ 资料[2][i]+ “

”; } } }

语言
英语
法语

这里有一个简单的解决方案。
不要将ybComplete用作回调函数,请使用以下函数:

beforeYbComplete(data){
   ybComplete(yb.id("lang").value, data)
}
并在handleSearch中更改此行:

// API link
tag.src = "https://" + lang + ".wikipedia.org/w/api.php?action=opensearch&limit=10&format=json&callback=beforeYbComplete&search=" + term;

这里有一个简单的解决方案。
不要将ybComplete用作回调函数,请使用以下函数:

beforeYbComplete(data){
   ybComplete(yb.id("lang").value, data)
}
并在handleSearch中更改此行:

// API link
tag.src = "https://" + lang + ".wikipedia.org/w/api.php?action=opensearch&limit=10&format=json&callback=beforeYbComplete&search=" + term;

@MichaelBurns我重写以处理语言的变化,同时仍保留输入中的文本field@MichaelBurns我重写以处理语言的变化,同时仍保留输入字段中的文本