Проблема с HTML-сущностями, вставленными с помощью JavaScript - PullRequest
1 голос
/ 26 декабря 2010

У меня есть следующий JS для динамического изменения содержимого списка выбора HTML внутри формы:

<script type="text/javascript">

var provincias = [];

provincias['bsas'] = new Array('Capital Federal','San Martin','Quilmes');
provincias['cba'] = new Array('C&acute;rdoba','La Carlota','Rio Cuarto');
provincias['nqn'] = new Array('Neuqu&eacute;n','Cipolletti','Plottier');

function setLoc() {
    provSel = document.getElementById('provincia');
    locList = provincias[provSel.value];
    updateLista('localidad', locList, locList);
}

function updateLista(fieldID, newOptions, newValues) {
    selectField = document.getElementById(fieldID);
    selectField.options.length = 0;
    for (i=0; i<newOptions.length; i++) {
    selectField.options[selectField.length] = new Option(newOptions[i], newValues[i]);
    }
}

</script>

И этот список:

<select name="provincia" id="provincia" onchange="setLoc();">
    <option value="bsas">Buenos Aires</option>
    <option value="cba">C&oacute;rdoba</option>
    <option value="nqn">Neuqu&eacute;n</option>
</select>

<select name="localidad" id="localidad">
    <option value="">Seleccione una localidad</option>
</select>

Это работает хорошо, но я не понимаю, по какой причине вывод сущностей, вставленных JavaScript, является буквальным: в окне вы видите &aacute; вместо & aacute ;. Хуже того, если я изменяю сущности специальными символами, браузер отображает странный знак вопроса (?), Причина, по которой я начал использовать сущности.

Кто-нибудь знает, есть ли ярлык для решения этой проблемы (например, специальный символ JS)? или я должен переформулировать свой скрипт, используя innerHTML для отображения результатов?

Еще одна вещь: имейте в виду, что это небольшой список, но этот скрипт будет адаптирован для загрузки данных формы из XML-документа, содержащего около 4000 записей (полный список штатов и городов моей страны). И я буду использовать базы данных MySQL для хранения данных формы). Это как кошмар для меня ...

Кстати: я пишу в utf8 без спецификации (сейчас я пишу это, но это проблема ...).

Приветствую, и спасибо всем заранее за хорошее мышление.

1 Ответ

1 голос
/ 20 января 2011

кажется, что javascript рассматривал текст опций как открытый текст, поэтому вам действительно нужно использовать innerHTML, например, так:

function updateLista(fieldID, newOptions, newValues) {
selectField = document.getElementById(fieldID);
for(i=0; i<newOptions.length; i++) {
    selectField.options[i] = new Option();
    selectField.options[i].innerHTML = newOptions[i];
    selectField.options[i].value = newValues[i];
    }
}

PS.Ваше первое значение массива 'cba' должно быть 'C&oacute;rdoba' вместо 'C&acute;rdoba'

...