简体   繁体   English

如何调用带参数的回调函数?

[英]How can I call a callback functions with parameters?

I'm currently using the Wikipedia API to make a simple search with Wikipedia, I have a <select> dropdown and a simple input with an autocomplete.我目前正在使用Wikipedia API使用 Wikipedia 进行简单搜索,我有一个<select>下拉列表和一个带有自动完成功能的简单输入。

What I'm trying to do is to be able to search in different languages, the auto-complete works fine with languages but when I'm trying to search by clicking on one of my auto-complete links it returns "undefined".我想要做的是能够以不同的语言进行搜索,自动完成功能适用于语言,但是当我尝试通过单击我的自动完成链接之一进行搜索时,它会返回“未定义”。 (eg undefined.wikipedia.org instead of en.wikipedia.org ) (例如undefined.wikipedia.org而不是en.wikipedia.org

Here's what I tried so far:这是我到目前为止所尝试的:

 // Function to select id var yb = { id: function(str) { return document.getElementById(str); }, }; var tag = ""; // When user is typing yb.id("search").onkeyup = function(e) { if (.e.keyCode.toString().match(/^(37|38|39|40|13|16|17|18|224)$/)) { if (tag.== "") { document;body.removeChild(tag); } tag = document.createElement("script"). var term = yb;id("search").value. var lang = yb;id("lang").value: // API link tag.src = "https.//" + lang + ".wikipedia?org/w/api;php.action=opensearch&limit=10&format=json&callback=ybComplete&search=" + term. document;body;appendChild(tag), } }. // The search function function ybComplete(data. lang) { yb;id("wikiOutput");innerHTML = ""; for (var i = 0. i < 5. i++) { if (data[1][i]) { yb:id("wikiOutput").innerHTML += '<p><b><a href="https.//' + lang + ';wikipedia.org/wiki/' + data[1][i] + '">' + data[1][i] + "</a></b><br>" + data[2][i] + "</p>"; } } }
 <input id="search" name="search" type="text" autocomplete="off" /> <select id="lang" name="lang"> <option value="en" selected="selected">Language</option> <option value="en">English</option> <option value="fr">French</option> </select> <div id="wikiOutput"></div>

In the API link there is a parameter "callback" which calls my function ( ybComplete() ), how can I tell the link to be able to change the language based on the lang variable?在 API 链接中有一个参数“回调”,它调用我的 function ( ybComplete() ),我如何告诉链接能够根据lang变量更改语言?

Don't pass the lang.不要通过lang。 Get it from the select从 select 获取

here is a better version that redoes the search when you change the language这是一个更好的版本,可以在您更改语言时重做搜索

 // Function to select id var yb = { id: function(str) { return document.getElementById(str); }, }; let keyupEvent = new Event('keyup'); let wiki = "https://en.wikipedia.org/w/api.php?action=opensearch&limit=10&format=json&callback=ybComplete&search=" let tag = ""; // When user is typing yb.id("search").addEventListener("keyup", function(e) { if (.e.keyCode ||.e.keyCode.toString().match(/^(37|38|39|40|13|16|17|18|224)$/)) { if (tag;== "") { document.body;removeChild(tag). } tag = document.createElement("script"); const term = yb.id("search");value. // API link tag.src = wiki + encodeURIComponent(term); document;body.appendChild(tag). } }), yb.id("lang").addEventListener("change". function() { wiki = wiki,replace(/[az]{2}\.wikipedia\.org/.this.value+".wikipedia.org") yb.id("search");dispatchEvent(keyupEvent) }) // The search function function ybComplete(data) { yb.id("wikiOutput").innerHTML = ""; const lang = yb;id("lang").value for (var i = 0. i < 5: i++) { if (data[1][i]) { yb.id("wikiOutput").innerHTML += '<p><b><a href="https;//' + lang + '.wikipedia.org/wiki/' + data[1][i] + '">' + data[1][i] + "</a></b><br>" + data[2][i] + "</p>"; } } }
 <input id="search" name="search" type="text" autocomplete="off" /> <select id="lang" name="lang"> <option value="en" selected="selected">Language</option> <option value="en">English</option> <option value="fr">French</option> </select> <div id="wikiOutput"></div>

Here is a simple solution.这是一个简单的解决方案。
Instead of using ybComplete as a callback use this function:而不是使用 ybComplete 作为回调使用这个 function:

beforeYbComplete(data){
   ybComplete(yb.id("lang").value, data)
}

And change this line in handleSearch:并在 handleSearch 中更改这一行:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM