Подтвердить что ты не робот

Ярлыки и скрытые поля в Internet Explorer (и jquery)

У меня возникли проблемы с проверкой скрытых флажков в IE. Это базовый html:

<input id="groups_ids_1" name="group_ids[]" type="checkbox" value="1" />
<label for="groups_ids_1">Display</label>

Это отлично работает, но если я скрою флажки, используя

$('input[type=checkbox]').hide();

или

$('input[type=checkbox]').css('visibility', 'hidden');

Нажатие метки больше не проверяет флажок в IE. Конечно, он отлично работает в Firefox, Chrome и Safari.

4b9b3361

Ответ 1

Вы можете попробовать добавить onclick к ярлыку, чтобы обойти проблемы IE.

$('label').click(function() {
  $('#' + $(this).attr('for')).click();
});

Если это не сработает, попробуйте вручную установить атрибут.

$('label').click(function() {
  var checkbox = $('#' + $(this).attr('for'));
  if (checkbox.is(':checked')) {
    checkbox.removeAttr('checked');
  } else {
    checkbox.attr('checked', 'checked');
  }
});

Ответ 2

Скрытые флажки не получают событий в версии IE ниже 9. Мое обобщенное решение выглядит следующим образом:

/* hide checkboxes */
input[type=checkbox] {
    visibility: hidden;
    position: absolute; /* move out of document flow */
}
/* ie8-: hidden inputs don't receive events, move out of viewport */
.lt-ie9 input[type=checkbox] {
    visibility: visible;
    top: -50px;
}

Не перемещайте входы влево или страница будет переходить в IE, когда вход получает фокус! .lt-ie8 - это класс, который указан в теге HTML для старых версий IE таким образом: (см. например: https://github.com/h5bp/html5-boilerplate/blob/master/index.html)

<!--[if IE 8]>  <html class="no-js lt-ie9" lang="en"> <![endif]-->

Но вы можете использовать свой предпочтительный метод, чтобы применить свойства во втором правиле только к старой версии IE. Применение правил через JS также должно работать, как вы, кажется, делаете.

Ответ 3

Лучший способ избежать этого - установить флажок абсолютно вверху: -1000px;

Ответ 4

Марк Дихельм: Скрытые флажки не получают событий в версии IE ниже 9.

В качестве варианта вместо visibility: hidden; или display: none используйте clip: rect(0 0 0 0);

Итак, вместо

$('input[type=checkbox]').hide();

или

$('input[type=checkbox]').css('visibility', 'hidden');

используйте что-то вроде

$('input:checkbox').addClass('hidden');

и

input[type=checkbox].hidden {
    clip: rect(0 0 0 0);
    position: absolute; /* move out of document flow */
}

Он работает в обычных браузерах и в IE8

Ответ 5

Это работало для меня в IE8:

<!--[if IE 8 ]>
<style>
  input[type=checkbox] {
     position: absolute;
     filter: alpha(opacity=0);
  }
</style>
<![endif]-->