I am using this jquery code below to put a list of countries into a select option and set the user’s country as the default.
If I console log, the code shows I am recognising the user country correctly and in my project it has a blank where "United Kingdom" should be and that option is selected, it is just blank.
Why this is and what I should try doing differently?
const sortedData = result.data.sort();
for (var i = 0; i < sortedData.length; i++) {
if (sortedData[i] === userCountry) {
$("#country-selector").append(
$("<option selected>", {
value: sortedData[i],
text: sortedData[i],
})
);
} else {
$("#country-selector").append(
$("<option>", {
value: sortedData[i],
text: sortedData[i],
})
);
}
}
};```
2
Answers
Passing the
selected
attribute in the element HTML code to parse, appears to interfere with the setting of the attributes passed via parameters. Set theselected
via the parameters as well instead, astrue
orfalse
:There’s no overload to mix passing in an HTML snippet and apply additional attributes to that snippet.
Pick one or the other
or
According to jquery you can create DOM nodes using two methods (using
$(..)
at least):When you use
$("<option selected>", attrs)
the first argument is not a "single, standalone element" so jquery uses the first overload, passing your attributes as "ownerDocument" (which then gets ignored as it’s the wrong type).