Насколько безопасным/надежным/совместимым с кросс-браузером является $(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/