Javascript/Jquery to go to URL from <input> and <datalist>
我的问题:我正在寻找一个输入框,当我输入建议时自动完成它们。键入后,通过单击或按Enter键选择第一个选项(这已在插件中找到),我想提交与URL绑定的选择,以重定向到新的URL。
插件的基本示例这是直接从开发人员的网站和一个使用的例子。
1 2 3 4 5 6 7 8 9 10 | <input class="form-control awesomplete" list="mylist" /> <datalist id="mylist"> <option>Ada</option> <option>Java</option> <option>JavaScript</option> <option>Brainfuck</option> <option>LOLCODE</option> <option>Node.js</option> <option>Ruby on Rails</option> </datalist> |
我要用它来导航美国各州的列表。这里的想法是将一个新的(或当前窗口)重定向到与状态关联的URL。阿拉巴马州将访问http://www.alabama.gov等。
1 2 3 4 5 6 7 8 9 10 | <input class="form-control awesomplete" list="states" /> <datalist id="states"> <option>Alabama</option> <option>Alaska</option> <option>Arizona</option> <option>Arkansas</option> <option>California</option> <option>Colorado</option> <option>Connecticut</option> </datalist> |
1 | I stuck here: |
在进行了多次搜索之后,发现需要jquery或javascript来实现这一点,我尝试过一些解决方案,但似乎无法使其正常工作。这甚至不可能。我不想写太多我试过的东西,把帖子弄得乱七八糟,所以我尽量把它放在最基本的形式,并牢记这个想法。
据我所知,我需要将一个URL绑定到一个带有选项标签的值,对吗?在我的代码中有这样的例子,但我再次尝试将其保留在最基本的形式中,以供查看者使用。
您可以将URL存储在
1 2 3 4 5 6 7 8 9 10 | var aweInput = new Awesomplete(myinput); myinput.addEventListener('awesomplete-select', function(e) { var url = e.text.value; // The value associated with the selection console.log('navigating to: ' + url) // Some optional actions: e.preventDefault(); // Prevent the URL from appearing in the input box e.target.value = e.text.label; // Set the value to the selected label aweInput.close(); // close the drop-down //window.location.href = url; }); |
1 2 3 4 5 6 7 8 9 10 11 12 | <script src="https://cdnjs.cloudflare.com/ajax/libs/awesomplete/1.1.2/awesomplete.js"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/awesomplete/1.1.2/awesomplete.css" /> <input id="myinput" list="states" /> <datalist id="states"> <option value="http://www.alabama.gov/">Alabama</option> <option value="http://alaska.gov/">Alaska</option> <option value="https://az.gov/">Arizona</option> <option value="http://www.arkansas.gov/">Arkansas</option> <option value="http://www.ca.gov/">California</option> <option value="https://www.colorado.gov/">Colorado</option> <option value="http://portal.ct.gov/">Connecticut</option> </datalist> |
在awesomplete的API中,您将找到事件列表。一旦事件发生,awesomplete selectcomplete将在用户选择其选项时激发事件。这就是你想要的。
您需要使用方法
见下面的代码:
1 2 3 4 5 6 7 8 9 | var input = document.getElementById('myinput'); new Awesomplete(input); input.addEventListener('awesomplete-selectcomplete', (e) => { // This callback will be called whenever a selection is made. console.log(e.text.label) // Grabs the text of the selection console.log('navigating to: ' +"www." + e.text.label +".gov") //window.location.href="www." + e.text.label +".gov"; }); |
1 2 3 4 5 6 7 8 9 10 11 | <script src="https://cdnjs.cloudflare.com/ajax/libs/awesomplete/1.1.2/awesomplete.js"> <input id="myinput" list="states" /> <datalist id="states"> <option>Alabama</option> <option>Alaska</option> <option>Arizona</option> <option>Arkansas</option> <option>California</option> <option>Colorado</option> <option>Connecticut</option> </datalist> |
如你所见,我不知道任何政府网站的网址,但你可以根据需要建立网址。
在我看来,你已经完成了大部分的工作,只需要编写一个小的javascript/jquery函数来做重定向。
例如(在
1 2 3 4 5 6 7 8 | var placeHolder = '[countryCode]'; var urlTemplate = 'https://www.' + placeHolder + '.gov'; $('.awesomplete').on('blur', function(e){ var value = e.target.value; var nextUrl = urlTemplate.replace(placeHolder,value); console.log('redirecting to - ' + nextUrl); //window.location.href = nextUrl; // uncomment for redirecting }); |
1 2 3 4 5 6 7 8 9 10 11 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <input class="form-control awesomplete" list="states" /> <datalist id="states"> <option>Alabama</option> <option>Alaska</option> <option>Arizona</option> <option>Arkansas</option> <option>California</option> <option>Colorado</option> <option>Connecticut</option> </datalist> |