Кроссбраузерная проблема: document.getElementById().значение не работает в IE, но работает в Firefox

#javascript #html #cross-browser

#javascript #HTML #кроссбраузерность

Вопрос:

У меня есть 1 выпадающий список [год], 2 текстовых поля [startDate, endDate] , всякий раз, когда пользователь выбирает год из выпадающего меню, текстовые поля startDate должны автоматически заполняться на 01/01/ year и endDate в 12/31/ year . Приведенный ниже скрипт отлично работает в Firefox, но в IE getElementById (‘ff5’).value не работает, есть предложения?

Мой скрипт:

 <script>
function autoPopulateDate(value, startDt,endDt){
      document.getElementById(startDt).value='01/01/' value;
      document.getElementById(endDt).value='12/31/' value;
}
</script>
  

HTML-код:

 <tr>
    <td>
        <select onchange="autoPopulateDate(this.value,'ff5','ff6')" size="1" name="ff4" id="ff4"><option value="">--amp;>select valueamp;<--</option><option value="2005">2005</option>
        <option value="2006">2006</option>
        <option value="2007">2007</option>
        <option value="2008">2008</option>

        <option value="ALL">ALL</option>
        </select>
    </td>
</tr>
<tr>
    <td ><font class="rtabletext">Savings Start Date: </font></td>
    <td >
        <input type="text" value="" name="ff5" id="ff5" maxlength="50" size="10" class="text">
    </td>
</tr>
<tr>
    <td><font class="rtabletext">Savings End Date: </font></td>
    <td>
        <input type="text" value="" name="ff6" id="ff6" maxlength="50" size="10" class="text">
    </td>
</tr>
  

Комментарии:

1. Да, но IE — это браузер, который мне нужно поддерживать.

2. @Rachel работает у меня в IE (8).

3. Я использую IE7, у меня нет другой страницы JavaScript, на самом деле эта функциональность необходима в инструменте создания отчетов.

4. Отлично работает в IE 7. Возможно ли, что в вашем документе есть какой-то другой элемент с идентификатором или именем «ff5»?

5. Нет, у меня нет другого элемента с идентификатором или именем как ff5

Ответ №1:

IE [по крайней мере, некоторые версии и режимы рендеринга] хочет, чтобы вы получали доступ к участникам формы через коллекцию forms.

 document.forms['someform'].elements['someelement'].value
  

В качестве альтернативы вы можете использовать некоторую библиотеку ajax (например http://www.asp.net/ajax ) и используйте этот метод извлечения элементов библиотеки, поскольку они обычно учитывают совместимость с браузером…

 $get('element')
  

Комментарии:

1. @KristoferA Нет, в этом нет необходимости, код работает просто отлично. Смотрите скрипку @ mu, связанную в его комментарии к вопросу.

2. 1, Как ни странно, это сработало для меня сейчас, если я пытаюсь получить доступ с помощью document.forms[‘someform’].elements [‘someelement’].value, спасибо КристоферУ

3. @Rachel ничего странного, просто проблема совместимости с браузером. Возможно (даже вероятно), что более поздние версии IE были выровнены с другими браузерами. Другими словами, ваш исходный код может работать в IE8 / IE9 (когда находится в стандартном режиме), но не в IE7/6/5/4/3 или даже в новых браузерах, если страница отображается в режиме quirks или совместимости.

4. @Pointy Можете ли вы уточнить, какие части моего ответа вы считаете неправильными и почему?

5. @KristoferA метод «document.getElementById()» отлично работает в Internet Explorer, по крайней мере, в IE 6 и почти наверняка также в IE 5.