16

У меня странные проблемы с моим (ASP.NET) веб-приложением в Microsoft Edge.Microsoft Edge: событие onclick перестает работать?

В какой-то момент событие onclick перестает работать. Все кнопки на странице, которые реагируют на событие onclick, перестают работать. На той же странице есть несколько кнопок, которые отвечают на событие onmousedown, и они продолжают работать.

Если я обновляю страницу, проблема исчезнет. В консоли нет ошибок. У меня нет этой проблемы с другими браузерами (включая IE11 под Windows 10).

У вас возникли подобные проблемы?

+1

Разместите код в ваш вопрос, пожалуйста. – j08691

+0

Код был бы полезен; живая демонстрация будет еще лучше. Я бы предложил вам записать образец производительности в F12 Developer Tools. Вы можете определить сценарий запуска, который блокирует ситуацию. – Sampson

+1

Это не так просто. Проблема возникает в сложном приложении ASP.NET/Ajax. Мне еще не удалось воспроизвести проблему с помощью простого кода. – Corne

ответ

4

Это не полный ответ, так как он не решает почемуclick события не работают, но я чувствую, что это принадлежит здесь, как и моя команда, и я безнадежно застрял, пытаясь найти ответ на этот вопрос , Кажется, это ошибка в Edge, и каждый обходной путь, который мы пробовали, не удался, пока я не наткнулся на комментарий @ Come выше.

Решение должно было изменить все наши события click на события mouseup, эмулируя такое же поведение. По какой-то причине mouseup был запущен, даже когда click не было. mousedown работает также, но mouseup более правильно эмулирует click.

var listenType = (navigator.userAgent.toLowerCase().indexOf('edge') != -1) ? 'mouseup' : 'click'; 

// ... 

$("#my_element").on(listenType, function() 
{ 
    // ... 
} 

Надеюсь, это поможет кому-то!

+1

Не только .click not fire, вещи, как флажки, не будут проверять, когда он войдет в это состояние ... и в нашем случае это не влияет на всю страницу, просто на определенный div, поэтому щелчок за пределами этого div будет работать и фактически решит проблему. –

+0

Очень странно. Отправляйся, если с ним все получится! :) – Will

+1

Хорошо, что я нашел до сих пор, две вещи в совокупности, похоже, вызывают это ... в значительной степени сочетание создания дочернего окна и перемещение элементов с jquery preend для элементов MOVE, а не их добавления. –

4

Это ошибка в Edge.

Что я нашел, так это то, что оно связано с появлением дочернего окна и перестановкой (или изменением) tr в таблице.

https://connect.microsoft.com/IE/feedback/details/2109810/browser-stops-registering-click-events-on-table

Чтобы исправить это, вы должны заставить таблицу перерисовывать. Вы можете сделать это, установив отображение: none перед изменением таблицы, а затем установив отображение: previousValue после его изменения.

Надеюсь, это поможет.

+1

Большое вам спасибо! Это сводило меня с ума. FWIW Я обновлял содержимое TBODY таблицы, когда пользователь щелкал различными кнопками фильтра. Это работало нормально, если вы не щелкнули что-то в TBODY, а затем нажали другую кнопку фильтра (кнопки фильтра не находятся в TBODY), после обновления html для tbody, никакие клики не пройдут, и вы даже не сможете нажать F5, чтобы обновить страницу. Исправлено это использование вашего наконечника с дисплеем css. На самом деле мне нужно было только установить его на TBODY, если это кому-то поможет. Еще раз спасибо, спасли мне часы. – supertemp

+0

Является ли это «связанным с всплытием дочернего окна и перестановкой (или изменением) tr в таблице», или оно должно быть «связано с появлением дочернего окна ** AND/OR **, перестраивая (или изменяя) tr в стол" ? –

+0

https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/5782378/ –

2

Моим решением было создать «скрытый» элемент ввода и вызвать фокус на нем, который волшебным образом возвращает клики.

+1

скрытое поле ввода не работает для меня, но фокусировка на кнопке ввода, которая уже отображается, работает нормально, тогда можно решить глупый вопрос. thx для предложения ur. –

+0

@MahJinKhai, скрытый, я имел в виду абсолютно неподвижное и скрытое от окна просмотра. – neptunian

1

В моем случае удаление дочерних элементов вызывает эту проблему. Поэтому, когда я удаляю элемент (включая замену DOM на innerHTML), я делаю style.display = "none" для элемента перед удалением. Это решает проблему.

Например, я использую эту функцию

function removeComponent(selector) { 
    $(selector).css("display", "none"); 
    return $(selector).detach(); 
} 

вместо

function removeComponent(selector) { 
    return $(selector).detach(); 
} 
Смежные вопросы