Не работает live в IE8
Доброго времени суток.
Возникла следующая проблема в IE8 не срабатывает событие click определенное через $('.h').live('click',function() {.. В IE9 все работает отлично, а вот в 8 не идет (для версий ниже 8 не делаю) Некоторые тонкости возникшей проблемы: элементы с классом .h создаются динамически, соответственно, чтобы функция срабатывала и на вновь созданных элементах, использую именно метод live. Так же пробовал создать элемент в коде к которому сразу прописал обработчик события click var el = $('<td/>', { html: el2, class: "h", click: function() {alert("work!")} }); и далее просто добавлял этот элемент в нужное место. Работает везде кроме IE8. В чем же проблема? Может кто какие ещё варианты предложит? Для наглядности вот документ в котором данная бага http://promecovata.ru/calc/ Бага возникает в момент, когда вы выбрали (кликом) материалы из общего списка и в поле t,мм пытаетесь вписать толщину слоя. Заранее благодарю всех, кто отзовется. |
Цитата:
Цитата:
$('td.h').live('click',function() {.. |
Цитата:
<img style="position:absolute;width:42px;height:20px" src="blank.gif"/> (* и буквы - похоже не помогают, |
Итак господа, проверил все ваши рекомендации
Цитата:
Цитата:
Сейчас решил проверить, сработает ли клик на ячейках, которые были в DOM при открытии страницы - нет. Не срабатывает. Может тонкость в том, что есть обработчик клика по строке tr и отдельный обработчик клика для одной из ячеик этой строки (собственно тот, который не работает). Может тут собака зарыта. А ещё сегодня тестил ошибку и случайно понял, что в IE8 alert() не работает. А я именно им все функции проверяю. Короче копаю. Если что откопаю - сообщу. |
santik,
Пробуйте воткнуть onclick="FuncMy()" прямо на изо в <TD> Способ работает во всех ИE- проверено десятилетиями |
Итак, как ни странно оказалось, что alert действительно не хочет работать в ie8. Проверил самым надежным способом, просто прописал alert в начале вызова jquery
$(function() { Во всех браузерах вызвался алерт, даже в IE9, но не в IE8. Тогда начал проверять конструкцией $('#info').html("okk");- оказалось что live('click' ...) срабатывает! Проблема в другом, и тут я вам объясню что хочу и что не получается. Есть таблица, в каждой строке в последней ячейке под классом "h" по умолчанию стоит 0. Необходимо чтобы при клике на эту ячейку можно было отредактировать значение в ней. До вызова $(function() {... определена функция function addinput(el) { el.html('<input type="text" value="'+el.html()+'" size="1">'); //берем значение из ячейки и вставляем в ячейку input с этим значением el.children(':first').focus(); //наводим фокус на вставленный input }; Повесил следующий обработчик на клик по ячейке .h $('.h').live('click',function() { addinput($(this)); }); Чтобы при перемещении курсора внутри input не срабатывал обработчик click прикрепленный к родительской ячейке td использую следующую конструкцию $(".h :input").live("click",function() { return false; }); И наконец когда ввели нужное значение в input, кликаем по пустому пространству и удаляем input оставляя значение из него $('.h').live('blur',function() { $(this).html($(this).children(':first').val()); }); Это все верно работает везде, кроме IE8. Но! если убрать строку el.children(':first').focus(); //наводим фокус на вставленный input то в IE8 так же появляется input, правда редактировать в нем ничего не выходит, т.к. фокуса нет, а если устанавливать курсор мышью, input опять исчезает. Вот такие странности. Копаю... |
Итак, с облегчением могу сообщить, что решение найдено!
Оказалась проблема не в методе live, который, как мне показалось изначально не срабатывал, а в конструкции $('.h').live('blur',function() { $(this).parents('tr').html($(this).children(':first').val()); });Данная конструкция была призвана убрать поле ввода оставив только введенное в него значение. Эта конструкция не давала правильно функционировать в IE8 и была заменена следующей $('.h :input').live('focusout',function() { $(this).parents('td').html($(this).val()); }); Всем, кто принял участие в обсуждении и дал советы - большое спасибо! |
попробуйте посмотреть, что у вас получается в итоге после этой строчки:
el.html('<input type="text" value="'+el.html()+'" size="1">'); мне почему-то кажется, что надо использовать не html(), а text() для получения значения. ну и фокус можно повесить, используя селектор jquery: $('input', el).focus(); вместо вашего el.children(':first').focus(); проверьте, пожалуйста, у меня виндовса нет, к сожалению. по поводу же события фокусаут — это только для ие, сделайте так: $('.h :input').live('focusout blur',function() { будет более кроссбраузерно, хотя мне казалось, что ие свободно генерит blur, очень странно выходит. |
tadjik1,
Цитата:
Цитата:
Цитата:
$('.h :input').live('focusout',function() {, т.к. проверил его во всех IE (9,8 и даже в 7 и 6) - работает как часы. Действительно проверил, ради интереса, работоспособность в 7 и 6 эксплорерах, основной функционал работает - чем был приятно удивлен, но некоторые функции работы со строками таблицы не работают. Но об этом в другой раз, т.к. главное, что начиная с 8-го все пашет. По ходу написания кода, ошибки устраняю, но появляются новые. Так вот например столкнулся с проблемой, что в IE (ни в одном) не могу обратиться к window.opener из которого было событие window.open(url,'report') Во всех браузерах работает, а вот для IE ещё не нашел решения. Если конкретнее, то из родительского окна нужно передать несколько значений в дочернее. Очень не хотелось бы делать это через GET. Для всех "нормальных" браузеров использую var w = window.opener; $("#msg").html($("#msg", w.document).html()); В IE8 ошибка "w.document - есть null или не является объектом" Может кто что подскажет? Как в IE покопаться в родительском окне из дочернего? |
Цитата:
Вот так все работает отлично. var w = window.opener; var rreq = $("#rreq", w.document).html(); $("#rreq").html(rreq); А вот скопировать строки таблицы из родительского в дочернее - вообще никак не идет в IE (во всех других работает). var mat = $("#my-material tr", w.document).clone(); $("#my-material").html(mat); #my-material - это таблица <table style="width:949px;" id="my-material"> </table> Есть идеи как скопировать строки таблицы или таблицу из родителя в ребенка? |
Часовой пояс GMT +3, время: 10:52. |