Я попытался немного отделить это, чтобы привести вас к тому разделу, с которым вы боретесь. Я довольно ржавый на jQuery, поэтому я перевел это на обычный JS, но, надеюсь, все еще ясно.
функция renderList
показывает параметры построения и отправку их в innerHTML для родительского элемента.
и в функции init
функцияОбработчик флажка работает над изменением списка, который будет отображаться
В нескольких местах, которые выглядят как проблема в вашем первоначальном примере, нет начального состояния загрузки (раскрывающийся список пуст, пока вы неустановите флажок), и вы только добавляете в свой список выбора (вам нужно будет удалить параметры перед сбросом)
const jsonData = '{"status":"success","text":"Locations found","data":[{"name":"Afghanistan","code":"af"},{"name":"Albania","code":"al"},{"name":"Algeria","code":"dz"}]}';
const buildOption = (option) => `<option value="${option.code}">${option.name}</option>`;
const renderList = (list, parentElement) => {
const options = list.map(item => buildOption(item)).join('');
parentElement.innerHTML = options;
}
const init = (jsonData) => {
const obj = JSON.parse(jsonData);
const selectBox = document.querySelector("#country");
const checkBox = document.querySelector("#newcountry");
let list = obj.data;
checkBox.addEventListener("change", event => {
if (event.target.checked) {
list.push({
name: "India",
code: "code"
});
return renderList(list, selectBox);
}
// this section finds the added 'India' element and then slices it out of the list.
const idx = list.findIndex(i => i.name === "India");
if (idx > -1) {
list = [...list.slice(0, idx), ...list.slice(idx + 1)];
}
renderList(list, selectBox);
});
renderList(list, selectBox);
};
init(jsonData);
<form action="">
<div>
<input id="newcountry" type="checkbox">
<select id="country" name="country">
<option value="">
--Select value--
</option>
</select>
</input>
</div>
</form>