Если у option атрибут value не определен, то браузер при отсылке формы вместо value использует содержимое тега. И, конечно же, функция собирающая данные с этой формы, например, для ajax-запроса, должна делать все симметрично. Нужно узнать определен ли value у option, первое что вспомнилось - hasAttribute, но он не захотел работать в IE, полез подсматривать во фреймворки и вот что нашел:
PrototypeJs (1.6.1_rc3 , str 2900):
hasAttribute: function(element, attribute) {
attribute = Element._attributeTranslations.has[attribute] || attribute;
var node = $(element).getAttributeNode(attribute);
return !!(node && node.specified);
}
Может сложиться впечатление, что getAttributeNode добавляется самим фреймворком, но это не так, он (метод) даже на w3.org описан.
Jquery (1.3.2 , str 415):
return (elem.attributes.value || {}).specified ? elem.value : elem.text;
Оба варианта везде работают, вот теперь не знаю что выбрать.
Т. е. либо так:
return (elem.attributes.value || {}).specified ? elem.value : elem.text;
либо так:
return (elem.getAttributeNode('value') || {}).specified ? elem.value : elem.text;
Может кто-нибудь знает какой-либо недостаток (кроме разницы в производительности и количестве кода) у одного из вариантов?