IE, getElementById и переключатели - PullRequest
0 голосов
/ 03 февраля 2011

Простой код:

<input type="radio" id="knob-reassign-leave" name="knob-reassign" value="n" checked="checked">Leave <br>
<input type="radio" id="knob-reassign-cmp" name="knob-reassign" value="d"> Default <br>
<input type="radio" id="knob-reassign" name="knob-reassign" value="r"> Reassign to

<select name="assigned_to" id="assigned_to" onchange="
  if ((this.value != 'currentuser') && (this.value != '')) {
    var kr = document.getElementById('knob-reassign');
    document.getElementById('knob-reassign').checked=true;
  }">

  <option value="otheruser">Someone Else</option>
  <option value="lastuser">Someone Third</option>
  <option value="currentuser" selected="selected">Me</option>
</select>

Все это очень хорошо работает в FF и Chrome, но, как я всегда слышу, когда пишу код, в IE это не работает.Похоже, что IE ищет «имена» для идентификатора или пытается преобразовать идентификатор в имя, потому что он всегда выбирает первое радио, когда оно должно захватить последнее.

1 Ответ

0 голосов
/ 03 февраля 2011

IE6 / 7/8 действительно, кажется, выбирает первый элемент <input>, когда имя и идентификатор совпадают. Вот простой тестовый пример:

<input type="radio" id="a" name="c" value="1">
<input type="radio" id="b" name="c" value="2">
<input type="radio" id="c" name="c" value="3">

<script type="text/javascript">
    // Should get 3rd <input> with id 'c' and alert '3'
    // Instead finds 1st input with name 'c' and alerts '1'
    alert(document.getElementById('c').value); 
</script>

Хотя я не могу предложить объяснение ( У Google есть тонны релевантных результатов ), я могу предложить исправление: либо переопределите реализацию getElementById в IE, либо измените идентификатор последний элемент должен отличаться от имени:

<input type="radio" id="knob-reassign-leave" name="knob-reassign" value="n" checked="checked">Leave <br>
<input type="radio" id="knob-reassign-cmp" name="knob-reassign" value="d"> Default <br>
<input type="radio" id="knob-reassign-reassign" name="knob-reassign" value="r"> Reassign to

<select name="assigned_to" id="assigned_to" onchange="
  if ((this.value != 'currentuser') && (this.value != '')) {
    document.getElementById('knob-reassign-reassign').checked=true;
  }">

  <option value="otheruser">Someone Else</option>
  <option value="lastuser">Someone Third</option>
  <option value="currentuser" selected="selected">Me</option>
</select>
...