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

Щелчок ярлыка не работает в IE 8

У меня есть следующий элемент списка:

<li>
    <input value="someRadioButton" name="ctl00$mainContent$group" type="radio"
        id="ctl00_mainContent_somelRadioButton" onclick="showSomeInfo()" />
    <label for="ctl00_mainContent_someRadioButton">
        <img class="extraPadding-Right-10" src="https://xxy.com/some_mark_37x23.gif" />
    </label>
</li>

Итак, что отображается, это переключатель и изображение рядом с ним. Когда я нахожусь в FireFox, Chrome и Safari, нажимая на это изображение, запускается showSomeInfo(), указанная в радиоприемнике onclick. Я не уверен, почему я предполагаю, потому что он заключен в ярлык и этот ярлык относится к этой радиокнопке....

Но в любом случае это не моя проблема. Мне нравится, когда вы нажимаете изображение, вызывается этот метод javascript showSomeInfo(). Но проблема в том, что он работает во всех браузерах, кроме IE 8. Если я открою эту страницу в IE 8, щелчок по изображению ничего не делает, и я не уверен, почему. Я озадачен этим.

4b9b3361

Ответ 1

Причина, по которой он работает так, как это делается в Firefox и др., заключается в том, что предполагается <label>, когда он получает атрибут "для", который указывает на поле ввода (по значению "id" ). Если это не работает в IE, это потому, что Microsoft либо интерпретировала стандарт по-другому, либо просто не смогла реализовать его правильно. (Я не вижу ясного языка в ссылке w3c, которую я нашел, чтобы указать, нужно ли сосредоточиться на текстовом содержимом ярлыка и передать его.)

Ответ 2

Я искал ответ на этот вопрос и написал для него быстрый грязный обработчик jquery:

$("label").click(function(){
    if ($(this).attr("for") != "")
        $("#" + $(this).attr("for")).click();
});

Ответ 3

Там немного более чистый подход для изменения разметки, которая не включает (уродливые) хаки CSS или Javascript; измените тег <img> на тег <span> с фоновым изображением соответствующего размера. Например:

<li>
  <input value="someRadioButton" name="ctl00$mainContent$group" type="radio"
         id="ctl00_mainContent_somelRadioButton" onclick="showSomeInfo()" />
  <label for="ctl00_mainContent_someRadioButton">
    <span class="extraPadding-Right-10" style="background-image: url(https://xxy.com/some_mark_37x23.gif); width: 100px; height: 100px; display: inline-block" />
  </label>
</li>

Соответственно замените ширину и высоту изображения.

Ответ 4

Я также обнаружил, что если у вас есть скрытый ввод с display:none или visibility:hidden и они полагаются на метку для выбора, это не будет работать в ie8.

Мое обходное решение состояло в том, чтобы иметь overflow:hidden на содержащем элементе и расположить вход за пределами этой области.

Ответ 5

Я думаю, у меня есть лучшее решение для взлома этой проблемы. Я объясню, почему для первого.

Использование jquery для нажатия на ярлык работает, но не когда вы используете входной файл, потому что вы получите отказ в доступе.

С помощью css и отображения изображения в качестве фона это тоже не хорошо, потому что вам нужно иметь изображение с точно размером, что не так, когда пользователь загружает изображение или у вас много изображений с разными размеры.

Теперь я объясню идею взлома:

У вас есть ярлык с изображением внутри, когда вы нажимаете изображение, IE8 не запускает ярлык. Но если вы пишете текст в ярлыке, когда вы нажимаете на текст IE8, загорайте ярлык.

Идея состоит в том, чтобы установить интервал внутри метки с размером метки (ширина и высота)

Хорошо, но если у вас нет текста внутри, это не будет работать, но если вы измените цвет фона, он будет работать.

Итак, что вам нужно сделать:

  • Поместите пробел с размером роли метки
  • Введите цвет фона и сделайте его прозрачным.
  • Расположите Span, используя относительное положение, чтобы поместить Span точно над меткой.

Это немного сложно сделать, но я думаю, что это затронет еще много ситуаций. Пример ярлыка, запускающего файл типа ввода:

<label for="" id="lblInput" style="cursor: pointer; z-index:3;">
    <img src="../Imagens/SemPerfil.jpg" ID="imgFoto" Style="max-width: 280px; max-height: 180px;z-index:2;" />
    <span style="position:relative;
        top:-180px;display:block;height:180px;width:280px;
        z-index:1;background-color:Aqua;
        -ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=1)';
        background: rgba(255, 255, 255, 0.0);" >
    </span>
</label>

Я надеюсь, что это сработает и спасет вас. Как это спасло меня.

Ответ 6

Вы уверены, что не просто смотрите на опечатку? Проверьте " ctl00_mainContent_someRadioButton" против " ctl00_mainContent_somelRadioButton"

Ответ 7

Похоже, что IE неправильно обрабатывает метки с элементами img. Единственными разумными способами, которые я смог найти для решения этой проблемы, являются с использованием поведения HTML-компонентов, Обработчики Javascript или CSS hacks. Я не пробовал все это, поэтому я не могу гарантировать, что они будут работать.

Ответ 8

Я попробовал некоторые из других решений, размещенных здесь, и в конечном итоге внес поправки в них, чтобы получить рабочее исправление вашей проблемы. Моя проблема была схожа, хотя HTML выглядел несколько иначе, причем тег LABEL обертывал как изображение, так и переключатель INPUT.

Решение, которое я включил ниже, гарантирует, что все обработчики onClick будут правильно запускаться на самом переключателе. Он также делает это только один раз, а не в браузерах, где метка переключателя работает нормально.

Это код jQuery, который я использовал для решения проблемы в Internet Explorer 11:

$('LABEL > IMG').click(function () {
    var inputId = $(this).parents('LABEL:first').attr("for");
    if (inputId) $('#' + inputId).not(':checked').attr('checked', true).click();
});

В приведенном выше коде используется метод jQuery attr() для управления свойством checked. Если вы используете jQuery 1.6 или выше, вы должны изменить это, чтобы вместо этого использовать метод jQuery prop().

Ответ 9

Это работает для меня с группой радиовходов, за которыми следуют метки, содержащие изображение. В основном используется вместо использования для атрибута во всех браузерах

      inputs.each(function() {

         $(this).click(function (e) {
             // do stuff ...
         });

        // adding click handler to label containing image 
        $(this).next().on('click', function(event) {
            // prevent 'for' attribute firing
            event.preventDefault();
            // check and trigger click on input
            $(this).prev().prop("checked", true).trigger('click');
        });
     });