2009-11-18 2 views
4

У меня есть код JavaScript на моем веб-сайте php.
Этот код использует jQuery и создает меню select> <, используя вызовы ajax.Исправить предупреждение, вызванное HTML Validator

Вот код

sel.append('<option value="' + data[i].id + '">' + data[i].nombre + '</option>'); 

И это дает мне следующее предупреждение

линия 240 колонка 82 - Предупреждение: '<' + '/' + письмо не разрешено здесь

Кто-нибудь знает, как я могу исправить это предупреждение, поэтому мой html проверяет? Спасибо

+0

Вы пробовали использовать коды символов? – cwallenpoole

+0

Откуда взялось предупреждение? Валидатор HTML W3C? – powtac

+0

@ christopher-w-allen-polle: Я попробую! @powtac: Да, я использую расширение HTML Validator в Firefox – Enrique

ответ

10

вопрос заключается в том, что любая последовательность </ - известный как ETAGO - заканчивает элемент CDATA такой как <script>. Вы можете уйти с </ в браузерах, но не </script.

Самым простым решением является разбить </ последовательность с обратной косой черты побег:

sel.append('<option value="' + data[i].id + '">' + data[i].nombre + '<\/option>'); 

Однако эта линия все еще есть проблемы, потому что вы не HTML-спасаясь ваши id и nombre значения. Если они могут содержать <, & или ", вы только что создали уязвимость XSS на стороне клиента!

Так как HTML-бежать текстовые значения, прежде чем положить их в строки, или, может быть проще, просто использовать стандартный DOM:

sel.append (новый вариант (данные [я] .nombre данные [I ].Я бы));

+1

(с использованием стандартного DOM) ++. innerHTML быстрый и грязный, но в основном грязный. – Quentin

+0

Привет, бобин, я думаю, что ваш ответ - лучший выбор. Я попробовал sel.append (новый вариант ...) и работал. Теперь мой «вопрос» будет, как вы добавляете опцию с некоторыми атрибутами? например class = "firstoption", id и т. д.? Надеюсь, вы поняли меня – Enrique

+0

Вы можете сказать «var option = new Option (...)», а затем рассматривать его как любой другой элемент DOM, например 'option.className = 'firstoption';' или jQuery '$ (опция) .addClass ('firstoption'); '. – bobince

4

Поместите javascript во внешний файл.

+1

+1 всегда лучше для любого значительного количества кода – bobince

-2

Поместите <!-- и --> вокруг вашего кода.

+2

Это взлома для браузеров эпохи Netscape 2.0 ... это не решит эту проблему. – Quentin

+2

Не влияет на HTML4 (или HTML 3.2!). Разрывает скрипт в XML. – bobince

+0

Но он работает, браузеры игнорируют его. – powtac

1

Если вы пишете JavaScript на странице HTML/XHTML, вы можете заключить JavaScript в CDATA

<script type="text/javascript"> 
/* <![CDATA[ */ 
console.log("..js code here.."); 
/* ]]> */ 
</script> 
+1

Последовательность ' bobince

1

Чтобы включить код, который не кодируется в виде XML в XHTML документ (и я предполагаю, это то, что вы пытаетесь сделать), нужно сделать что-то вроде следующего:

<script type="text/javascript"> 
//<![CDATA[ 

alert("<This is now valid XHTML>"); 

//]]> 
</script> 
+0

Это приемлемое решение для работы со встроенным скриптом в XHTML, но валидатор будет жаловаться на ' Quentin

Смежные вопросы