Sunday, June 2, 2024
 Popular · Latest · Hot · Upcoming
113
rated 0 times [  118] [ 5]  / answers: 1 / hits: 18601  / 9 Years ago, tue, march 3, 2015, 12:00:00

Here is my HTML



<h2>Please Enter the Value in the Box(click on the desired value)</h2>
<input id='value' type=text autocomplete=on placeholder=country />
<div id=dropdown>
<select name=list id=list></select>
</div>


Here is my JavaScript



var arr = [Afghanistan,Albania,Algeria,Andorra,Angola,Anguilla,Antigua &amp; Barbuda,Argentina,Armenia,Aruba,Australia,Austria,Azerbaijan,Bahamas,Bahrain,Bangladesh,Barbados,Belarus,Belgium,Belize,Benin,Bermuda,Bhutan,Bolivia,Bosnia &amp; Herzegovina,Botswana,Brazil,British Virgin Islands,Brunei,Bulgaria,Burkina Faso,Burundi,Cambodia,Cameroon,Cape Verde,Cayman Islands,Chad,Chile,China,Colombia,Congo,Cook Islands,Costa Rica,Cote D Ivoire,Croatia,Cruise Ship,Cuba,Cyprus,Czech Republic,Denmark,Djibouti,Dominica,Dominican Republic,Ecuador,Egypt,El Salvador,Equatorial Guinea,Estonia,Ethiopia,Falkland Islands,Faroe Islands,Fiji,Finland,France,French Polynesia,French West Indies,Gabon,Gambia,Georgia,Germany,Ghana,Gibraltar,Greece,Greenland,Grenada,Guam,Guatemala,Guernsey,Guinea,Guinea Bissau,Guyana,Haiti,Honduras,Hong Kong,Hungary,Iceland,India,Indonesia,Iran,Iraq,Ireland,Isle of Man,Israel,Italy,Jamaica,Japan,Jersey,Jordan,Kazakhstan,Kenya,Kuwait,Kyrgyz Republic,Laos,Latvia,Lebanon,Lesotho,Liberia,Libya,Liechtenstein,Lithuania,Luxembourg,Macau,Macedonia,Madagascar,Malawi,Malaysia,Maldives,Mali,Malta,Mauritania,Mauritius,Mexico,Moldova,Monaco,Mongolia,Montenegro,Montserrat,Morocco,Mozambique,Namibia,Nepal,Netherlands,Netherlands Antilles,New Caledonia,New Zealand,Nicaragua,Niger,Nigeria,Norway,Oman,Pakistan,Palestine,Panama,Papua New Guinea,Paraguay,Peru,Philippines,Poland,Portugal,Puerto Rico,Qatar,Reunion,Romania,Russia,Rwanda,Saint Pierre &amp; Miquelon,Samoa,San Marino,Satellite,Saudi Arabia,Senegal,Serbia,Seychelles,Sierra Leone,Singapore,Slovakia,Slovenia,South Africa,South Korea,Spain,Sri Lanka,St Kitts &amp; Nevis,St Lucia,St Vincent,St. Lucia,Sudan,Suriname,Swaziland,Sweden,Switzerland,Syria,Taiwan,Tajikistan,Tanzania,Thailand,Timor L'Este,Togo,Tonga,Trinidad &amp; Tobago,Tunisia,Turkey,Turkmenistan,Turks &amp; Caicos,Uganda,Ukraine,United Arab Emirates,United Kingdom,Uruguay,Uzbekistan,Venezuela,Vietnam,Virgin Islands (US),Yemen,Zambia,Zimbabwe];
var input = document.getElementById('value');
var optionsVal = document.getElementById('list');

input.addEventListener('keyup', show);
optionsVal.onclick = function(){
setVal(this);
};

//shows the list
function show(){
var dropdown = document.getElementById('dropdown');
dropdown.style.display = 'none';

optionsVal.options.length = 0;

if(input.value){
dropdown.style.display = 'block';
optionsVal.size = 3;
var textCountry = input.value;

for(var i = 0; i < arr.length; i++){
if(arr[i].indexOf(textCountry) !== -1){
//addvalue
addValue(arr[i],arr[i]);

}
}

}
}

function addValue(text,val){
var createOptions = document.createElement('option');
optionsVal.appendChild(createOptions);
createOptions.text = text;
createOptions.value = val;
}

//Settin the value in the box by firing the click event
function setVal(selectedVal){
input.value = selectedVal.value;
document.getElementById('dropdown').style.display='none';
}


This issue i am running into is the logic involved when checking for the input value and showing the values in the dropdown. For example if i type in 'u' only countries 'Anguilla, Antigua' show up instead of any country with 'u' in it. I know the issue lies where i am checking for indexOf, but i am stuck here.



Also how can i keep the dropdown size dynamic to the values found? Your feedback would be great in improving the overall problem too


More From » javascript

 Answers
5

Why not use a match instead of indexOf?

Added benefit this will search case insensitive. http://jsfiddle.net/e6220t92/2/. Fiddle also has an attempt to increase the size of the select box.



    //CODE
var testableRegExp = new RegExp(RegExp.escape(textCountry),i);
if (arr[i].match(testableRegExp ) )
{
//logic
}
//CODE

//Use this function to replace potential characters that could break the regex
RegExp.escape= function(s) {
return s.replace(/[-/\^$*+?.()|[]{}]/g, '\$&');
};

[#67585] Sunday, March 1, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
carlo

Total Points: 705
Total Questions: 87
Total Answers: 101

Location: Indonesia
Member since Wed, Jul 7, 2021
3 Years ago
;