2011-12-14 2 views
3

Я таблица генерируется динамически, используя JQueryJQuery добавления hanlders событий в eval'ed элементы

this.html("<table><tr><td><div>Click Me</div></td></tr></table>"); 

в таблице, я несколько дивы (мой пример показывает только один, чтобы сохранить все просто), к которому я хочу добавить обработчик события click. Я хотел бы сохранить html чистым и использовать как можно большую мощность JQuery, но так как я делаю вещи типа «eval», я не могу понять, как это сделать.

Я знаю, что могу использовать $("div[some attribute selector]").on("click", {}, clickHandler);, но это хорошая идея в моем случае?

+1

Можете ли вы показать нам свой код 'eval()? Использование 'eval()' не является хорошей практикой, поэтому могут быть другие способы сделать это. – Bojangles

+0

@JamWaffles - здесь «eval» означает, что мы конвертируем «строки в вещи», вызывая this.htm (string). –

ответ

3

Вам нужно делегированных события. Чтобы сделать это, просто используйте jQuerys on() метод как это:

$(document.body).on('click', 'div', function(event) { 
    // do something 
}); 

Ref .: .delegate(), .on()

Что это? Почти все события делают то, что мы называем «пузырь». Это означает, что если вы нажмете на вложенный элемент, ваш браузер посмотрит, есть ли какой-либо обработчик click-event, связанный с этим узлом. Если это так, он выполняет их, а затем родительский элемент этого элемента также спрашивает, есть ли какой-либо обработчик события клика. Это продолжается до тех пор, пока не будет обработан какой-либо обработчик prevents событием от дальнейшего барботажа или мы достигли document.documentElement (html).

Таким образом, вы должны изменить выше document.body в ближайшего узла относительно ваших динамически добавляемых элементов.

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