всё верно. innerHTML, насколько знаю, только в IE способен изменять значение поля. не предназначен он для этого, ибо innerHTML — работает с DOM, а тут всё такие изменяется значение атрибута value. Поэтому и надо использовать .value.
а как быть со значками, это уже другой вопрос... например,
http://world-blog.ru/2562