Трудно сказать, почему проблема возникает, не видя живой пример. В прошлом я видел подобные проекты, в которых у IE6 были очень серьезные проблемы с производительностью, когда хендеры динамически связаны с якорями в больших таблицах. Но не тогда, когда они были жестко закодированы в html.
Один из способов решения этой проблемы - захват событий клика один раз на более высоком уровне в DOM и затем определение привязки источника. Если вы используете jQuery (> = v1.4.2), вы можете реализовать это довольно быстро, используя делегат .
Если в html есть следующие якоря (примечание: атрибут data-id
будет подтвержден с html5 doctype ):
<td>
<a href="#" class="lock" data-id="123">Lock/Unlock</a>
<a href="#" class="edit" data-id="123">Edit</a>
... data ...
</td>
В вашем js добавьте делегат события click, который сработает для всех якорей в таблице. Затем вы идентифицируете привязанный якорь по его идентификатору данных и вызываете любую нужную вам функциональность:
$('table').delegate('a', 'click', function() {
var el = $(this)
id = el.attr('data-id');
if (id && el.hasClass('lock')) {
alert('Lock/unlock ' + id);
// do stuff...
}
if (id && el.hasClass('edit')) {
alert('Edit ' + id);
// do stuff...
}
});
Преимущество использования делегата состоит в том, что при динамическом изменении содержимого таблицы обработка событий будет работать для вновь созданных якорей. Например, допустим, вы решили добавить нумерацию страниц в таблицу, в которую новые данные загружаются с помощью ajax.
ОБНОВЛЕНИЕ:
На основе комментариев добавлен пример http://jsfiddle.net/johnhunter/QKYJ5/, который использует параметры строки запроса для передачи данных делегатору. Это удерживает js от html и может послужить основой для резервного копирования без сценариев.