Что допустимо / недопустимые названия тегов HTML-формы в jQuery?

Поскольку fred не является булевской переменной. это - структура, которая имеет булево свойство под названием IsNull или HasValue, или безотносительно... Объект, названный fred, является сложным составным объектом, содержащим булевскую переменную и значение, не саму примитивную булевскую переменную...

Ниже, например, то, как мог быть реализован Интервал Nullable. Универсальный Nullable почти наверняка реализован так же (но в общем). Вы видите здесь, как неявные и явные преобразования реализованы..

public struct DBInt
   {
       // The Null member represents an unknown DBInt value.
       public static readonly DBInt Null = new DBInt();
       // When the defined field is true, this DBInt represents a known value
       // which is stored in the value field. When the defined field is false,
       // this DBInt represents an unknown value, and the value field is 0.
       int value;
       bool defined;
       // Private instance constructor. Creates a DBInt with a known value.
       DBInt(int value) 
       {
              this.value = value;
              this.defined = true;
       }
       // The IsNull property is true if this DBInt represents an unknown value.
       public bool IsNull { get { return !defined; } }
       // The Value property is the known value of this DBInt, or 0 if this
       // DBInt represents an unknown value.
       public int Value { get { return value; } }
       // Implicit conversion from int to DBInt.
       public static implicit operator DBInt(int x) 
       { return new DBInt(x); }

       // Explicit conversion from DBInt to int. Throws an exception if the
       // given DBInt represents an unknown value.
       public static explicit operator int(DBInt x) 
       {
              if (!x.defined) throw new InvalidOperationException();
              return x.value;
       }
       public static DBInt operator +(DBInt x) 
       { return x; }
       public static DBInt operator -(DBInt x) 
       { return x.defined? -x.value: Null; }
       public static DBInt operator +(DBInt x, DBInt y) 
       {
              return x.defined && y.defined? 
                      x.value + y.value: Null;
       }
       public static DBInt operator -(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                      x.value - y.value: Null;
       }
       public static DBInt operator *(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                      x.value * y.value: Null;
       }
       public static DBInt operator /(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                     x.value / y.value: Null;
       }
       public static DBInt operator %(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                      x.value % y.value: Null;
       }
       public static DBBool operator ==(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                     x.value == y.value: DBBool.Null;
       }
       public static DBBool operator !=(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                     x.value != y.value: DBBool.Null;
       }
       public static DBBool operator >(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                     x.value > y.value: DBBool.Null;
       }
       public static DBBool operator <(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                     x.value < y.value: DBBool.Null;
       }
       public static DBBool operator >=(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                      x.value >= y.value: DBBool.Null;
       }
       public static DBBool operator <=(DBInt x, DBInt y) 
       {
              return x.defined && y.defined?  
                     x.value <= y.value: DBBool.Null;
       }
       public override bool Equals(object o) 
       {
              try { return (bool) (this == (DBInt) o); } 
              catch  { return false; }
       }
       public override int GetHashCode() 
       { return (defined)? value: 0; }   
       public override string ToString() 
       { return (defined)? .ToString(): "DBInt.Null"; }   
   }
7
задан 4 revs, 3 users 64% 23 May 2017 в 12:04
поделиться

8 ответов

Здесь есть разница между «недопустимыми» именами и «взятыми» именами в отношении свойств DOM.

Ответ Джонатана Сэмпсона хорошо подходит для рассмотрения «недопустимых» имен, но на основе ваших В предыдущем вопросе, как вы думаете, о чем вы спрашиваете, так это о «взятых» именах, например, «каковы все остальные свойства DOM на узле формы?»

Краткий ответ: много.

Подробный ответ по сути является суммой этих двух списков , что означает «свойства DOM, общие для ВСЕХ узлов» и «свойства DOM, уникальные для формирования узлов»

Большие, о которых вы действительно хотите беспокоиться это второй список - они могут нарушить работу вашей формы.

6
ответ дан 6 December 2019 в 07:27
поделиться

Их довольно много.

Все это допустимые методы / свойства, которые можно найти в элементах FORM (из-за наследования интерфейса), и все они могут быть перезаписаны одинаковыми- именованные поля. Поэтому я бы посоветовал избегать этих имен, чтобы не столкнуться с случайными конфликтами:

Node interface members

ELEMENT_NODE
ATTRIBUTE_NODE
TEXT_NODE
CDATA_SECTION_NODE
ENTITY_REFERENCE_NODE
ENTITY_NODE
PROCESSING_INSTRUCTION_NODE
COMMENT_NODE
DOCUMENT_NODE
DOCUMENT_TYPE_NODE
DOCUMENT_FRAGMENT_NODE
NOTATION_NODE
nodeName
nodeValue
nodeType
parentNode
childNodes
firstChild
lastChild
previousSibling
nextSibling
attributes
ownerDocument
insertBefore
replaceChild
removeChild
appendChild
hasChildNodes
cloneNode
normalize
isSupported
namespaceURI
prefix
localName
hasAttributes

HTMLElement interface members

id
title
lang
dir
className

HTMLFormElement interface members

elements
length
name
acceptCharset
action
enctype
method
target
submit
reset
item
namedItem

Я также провел некоторое время назад тест для этих , который позволяет проверить, как разные браузеры «ведут себя» с этими именами .

3
ответ дан 6 December 2019 в 07:27
поделиться

Если ваша цель - избежать конфликта с любыми возможными ранее существовавшими свойствами объекта формы в javascript, то я думаю, что официальный стандарт, который вы ищете, - это объектная модель документа.

Если вы хотите поэкспериментировать и посмотреть, каковы встроенные свойства объекта формы в реальном браузере, попробуйте следующее:

<html><body onLoad="showEm()">
<form id="foo"></form>

<script>
function showEm() {
    for(var e in document.getElementById("foo")) {
      document.writeln(e);
      document.writeln("<br>");
    }
}
</script>

<body>
</html>

Обратите внимание, однако, что подавляющее большинство из них было бы безвредно для вас, если вы «переопределите», а я ' m даже не уверен, все ли они могут быть отменены.

2
ответ дан 6 December 2019 в 07:27
поделиться

Спасибо всем за полезные ответы. Ответы, похоже, ориентированы на то, что находится в DOM, и их не следует использовать (например, «элементы» и т. Д.). Другая часть вопроса - какие символы разрешены.

Я нашел спецификацию того, какие символы разрешены для токенов имен в HTML4 , в котором говорится:

6.2 Основные типы SGML

...

  • Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисами ("-") , подчеркивания ("_"), двоеточия (":") и точки (".").
2
ответ дан 6 December 2019 в 07:27
поделиться

Не начинайте с цифр («1 корова»), не используйте знаки препинания («одна корова !?») и не включайте пробелы («одна корова»).

Там это случаи, когда вы можете использовать квадратные скобки [и], если вы PHP-программист и хотите создать массив из нескольких элементов с одинаковым именем.

<input name='colors[]' value='blue'  />
<input name='colors[]' value='black' />
1
ответ дан 6 December 2019 в 07:27
поделиться

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

Конечно, придерживайтесь буквенные символы, но можно добавить числовое значение в конец.

Для многих в ASP.NET может помочь ошибка, добавляющая долларовую нотацию к тегу имени, так что вы можете попробовать. Конечно, мне интересно посмотреть, что произойдет.

0
ответ дан 6 December 2019 в 07:27
поделиться

Насколько мне известно, "зарезервированных слов" как таковых не существует, поэтому при соблюдении критериев в отношении допустимых символов (без пробелов, знаков препинания и должны начинаться с буквы) имя атрибут может содержать что угодно.

0
ответ дан 6 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: