2010-05-07 5 views
1

У меня есть div, содержащий несколько div, в которых обновляется каждые 25 мс с помощью innerHTML (по соображениям производительности). Я попытался использовать делегирование событий для захвата событий, но ничего похожего на захват события click не происходит. Я думаю, что это может быть связано с тем, что содержимое обновляется. Любые идеи были бы очень желанными.innerHTML и делегирование событий

Мой код:

$(document).ready(function() { 
var canvas = $('#gCanvas')[0]; 

$(document.body).delegate('a', 'click', function (e) { 
    console.log(e.target); 
}); 

var sprites = []; 
for (var i = 0; i < 100; i++) { 
    sprites[i] = {x: i+10, y: i+10}; 
} 


var doIt = function() { 
    var s = ''; 

    for(var i = 0; i < sprites.length; i++) { 
     var spr = sprites[i]; 
     spr.x++; 
     spr.y++; 

     s+= '<a id="s'+i+'" class="s" style="left:'+sprites[i].x+';top:'+sprites[i].y+'"></a>'; 
    } 

    canvas.innerHTML = s; 
}; 
//doIt(); 
setInterval(doIt, 50); 

});

Благодаря

Марк

+0

Пожалуйста, покажите нам свой код. – SLaks

+0

Почему вы так быстро обновляетесь? –

+0

Обновление каждые 25 мс может быть немного экстремальным? – nickf

ответ

1

легко, если вы используете JQuery. есть функция .live, но я не уверен, достаточно ли она достаточно. в качестве альтернативы можно попробовать проверить источник Jquery, чтобы найти код .live() и найти решение

UPDATE

, если вы пытаетесь сделать игру, то вы можете попробовать использовать SVG для хороших браузеров и vml для плохих.

+0

Решение, которое 'live' использует, - это делегирование событий, которое OP говорит, что он делает. – bobince

+0

У SVG отсутствует производительность, которую вы можете получить по сравнению с innerHTML – limptwiglet

+1

@Mark Gerrard: нормально, тогда вы можете попытаться определить положение мыши, когда пользователь нажимает на оверлей поверх поля просмотра/поля игры и находит ближайший div. –

Смежные вопросы