Я пытаюсь написать плагин jQuery, который использует атрибут для определения поведения проверки формы (да, я знаю, что плагин проверки уже есть; это такое же учебное упражнение, как и то, что я буду использовать) , В идеале я хотел бы иметь что-то вроде этого:
Пример 1 - ввод:
<input id="name" type="text" v:onvalidate="return this.value.length > 0;" />
Пример 2 - обертка:
<div v:onvalidate="return $(this).find('[value]').length > 0;">
<input id="field1" type="text" />
<input id="field2" type="text" />
<input id="field3" type="text" />
</div>
Пример 3 - предопределено:
<input id="name" type="text" v:validation="not empty" />
Цель здесь - позволить моему коду jQuery выяснить, какие элементы должны быть проверены (это уже сделано), и все еще иметь допустимую разметку XHTML, с чем у меня проблема. Я вполне уверен, что для этого потребуется сочетание DTD и XML-схемы, но я не совсем уверен, как именно выполнить.
На основании этой статьи я создал следующее DTD:
<!ENTITY % XHTML1-formvalidation1
PUBLIC "-//W3C//DTD XHTML 1.1 +FormValidation 1.0//EN"
"http://new.dandoes.net/DTD/FormValidation1.dtd" >
%XHTML1-formvalidation1;
<!ENTITY % Inlspecial.extra
"%div.qname; " >
<!ENTITY % xhmtl-model.mod
SYSTEM "formvalidation-model-1.mod" >
<!ENTITY % xhtml11.dtd
PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml11.dtd;
А вот "formvalidation-model-1":
<!ATTLIST %div.qname;
%onvalidation CDATA #IMPLIED
%XHTML1-formvalidation1.xmlns.extra.attrib;
>
Я никогда не делал DTD раньше, поэтому я даже не совсем уверен, что делаю. Когда я запускаю свою страницу через валидатор W3 XHTML, я получаю более 80 ошибок, потому что она получает повторяющиеся определения всех элементов XHTML. Я хотя бы на правильном пути? Есть предложения?
EDIT:
Я удалил этот раздел из своего пользовательского DTD, потому что оказалось, что он на самом деле ссылается на себя, и код, из которого я получил шаблон, на самом деле предназначен для объединения двух DTD в одно, а не для добавления определенных элементов к одному:
<!ENTITY % XHTML1-formvalidation1
PUBLIC "-//W3C//DTD XHTML 1.1 +FormValidation 1.0//EN"
"http://new.dandoes.net/DTD/FormValidation1.dtd" >
%XHTML1-formvalidation1;
Я также удалил это, потому что это не проверяло и, похоже, ничего не делало:
<!ENTITY % Inlspecial.extra
"%div.qname; " >
Кроме того, я решил, что, поскольку я добавляю лишь несколько дополнительных элементов, модель отдельных файлов, рекомендованная W3, на самом деле не кажется такой полезной, поэтому я поместил все в файл dtd, содержимое которого теперь это:
<!ATTLIST div onvalidate CDATA #IMPLIED>
<!ENTITY % xhtml11.dtd
PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml11.dtd;
Итак, сейчас я не получаю никаких ошибок, связанных с проверкой DTD, но атрибут onvalidate по-прежнему недействителен.
Обновление: Я отказался от DTD и добавил схему: http://schema.dandoes.net/FormValidation/1.0.xsd
Использование v: onvalidate для проверки в Visual Studio, но службе W3C все еще не нравится.
Вот страница, на которой я ее использую, чтобы вы могли посмотреть на источник:
http://new.dandoes.net/auth
А вот ссылка на результат проверки w3c:
http://validator.w3.org/check?uri=http://new.dandoes.net/auth&charset=(detect+automatically)&doctype=Inline&group=0
Это настолько близко, насколько я смогу с этим разобраться, или я все еще делаю что-то не так?