Не работает 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, время: 06:18. |