Вопрос

Я пытаюсь написать плагин 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, поэтому даже не совсем уверен, что делаю.Когда я запускаю свою страницу через валидатор XHTML W3, я получаю более 80 ошибок, потому что она получает повторяющиеся определения всех элементов XHTML.Я хотя бы на правильном пути?Какие-либо предложения?


РЕДАКТИРОВАТЬ:Я удалил этот раздел из своего пользовательского 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=(обнаружить+автоматически)&doctype=Inline&group=0

Это настолько близко, насколько я могу это сделать, или я все еще делаю что-то не так?

Это было полезно?

Решение

Если вы хотите, чтобы результат был действительным XHTML, я считаю, вам нужно будет использовать Пространства имен XML а не собственный DTD.DTD не только определять язык (и, следовательно, собственный DTD «на самом деле» не является XHTML), но он будет выбрасывать любые браузеры, которые его читают, в режим причуд, даже если они не подавятся файлом.

С другой стороны, использование пространства имен позволит создать абсолютно корректный XHTML (хотя не все валидаторы учитывают пространство имен и могут не проверять его правильно) и позволят браузерам работать в (почти) стандартном режиме.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="http://example.com/ns/validation" xml:lang="en">
    <head><title>Validation Example</title></head>

    <body>
        <input id="name1" type="text" v:onvalidate="return this.value.length &gt; 0;"/>
        <input id="name2" type="text" v:validation="not empty"/>
    </body>
</html>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top