Насколько безопасным/надежным/совместимым с кросс-браузером является $(this) [0].defaultValue

Я хотел бы получить некоторую обратную связь относительно использования $(this) [0].defaultValue для определения того, изменилось ли значение текстового поля от исходного значения, например.

//keyUp event

if($(this)[0].defaultValue != $(this).val())
{
   //Field has been modified mark as dirty
}

В Chrome создается желаемый вывод в том смысле, что defaultValue всегда является исходным значением, которое текстовое поле было загружено в DOM. Однако я только недавно обнаружил это значение после обхода объектов DOM в инструментах Chrome Dev, которые ищут что-то совершенно другое, и я обеспокоен тем, что он может иметь целую кучу проблем. Кроме того, Google не сильно увеличил, что беспокоит меня еще больше...

Любая положительная обратная связь.

Приветствия Rob

Ответ 1

Кажется довольно безопасным. Я просто использовал эту скрипту: http://jsfiddle.net/rXsrQ/ и протестировал ее через chrome/firefox 3.6/safari 4/ie8, все они ведут себя одинаково.

Здесь описано: https://developer.mozilla.org/en/DOM/HTMLTextAreaElement, и нет никаких сообщений о проблемах совместимости.

Здесь также описано: http://msdn.microsoft.com/en-us/library/ms533718(v=vs.85).aspx и, похоже, совместимо с 5 и выше, поэтому я не понимаю, почему это не следует безопасно использовать.

Ответ 2

.defaultValue является нестандартным и, следовательно, не упоминается ни в одном проекте/спецификациях W3C. Если вы отвечаете за разметку HTML-разметки, атрибуты HTML5 data- кажутся очень удобным способом для получения кросс-браузера требуемого поведения.

Итак, вы можете сделать это как

<input type="text" value="foo" data-default="foo" />

jQuery захватит эти атрибуты data- и сохранит часть за - в качестве ключа в своем объекте расширения данных для этого конкретного node. Это означает, что вы можете просто получить доступ к этим значениям, вызвав

$('input').data('default') // === 'foo'

Пример: http://jsfiddle.net/zAuPf/