Я пишу скрипт, используя jQuery, чтобы добавить несколько блоков управления (div) на веб-страницу. Эти div содержат элементы управления (якоря), такие как close, prev, next, search и т. д. Пример кода:
$div_overlay =
$('<div></div>')
.addClass('overlay')
.append($('<div></div>')
.addClass('text_controls')
//The onClick method below works perfect but not .click() of jQuery(due to the way 'index' is used)
.append($('<a onClick="overlay_hide('+index+'); return false;"></a>')
.addClass('close')
.attr('href','#')
/*.click(function(){
//The 'index' gets incremented as divs are created and hence a wrong value(the last one) is passed irrespective of the div clicked
overlay_hide(index)
})*/
)
'index' - это глобальная переменная для отслеживания созданных "оверлейных" div. Он увеличивается по мере создания div, и каждый div помещается в массив по мере его создания. Таким образом, «индекс» — это, по сути, индекс массива div.
Для простоты я добавил только якорь «закрыть». $div_overlay
находится в функции, которая вызывается каждый раз при нажатии на изображение.
Моя проблема заключается в обработке событий щелчка для таких якорей, как «закрыть». Я хотел бы определить div, для которого щелкнут якорь, используя «индекс», который является глобальным var.
Я хотел бы иметь возможность передать ссылку на div, на котором выполняется действие закрытия. Если я использую метод щелчка jQuery, который прокомментирован в приведенном выше коде, чтобы закрыть div, он передает последнее значение индекса в качестве параметра overlay_hide()
(поскольку индекс увеличивается по мере создания div). Если я использую метод onClick, как указано выше, он отлично работает, передавая правильное значение индекса.
Итак, как мне идентифицировать эти элементы div с помощью индексов и получить к ним уникальный доступ в зависимости от того, какой элемент управления div был нажат? (Возможно, нужно использовать объекты, но я не уверен.)
Одним из способов было бы получить родителя нажатой привязки, но я не хочу делать это таким образом и хотел бы использовать индекс.
<div>
, а не в отдельные элементы<a>
, потому что тогда один обработчик мог бы просто определить, что делать, самой структурой DOM. На самом деле ему вообще не нужен идентификатор; контейнер оверлея может просто получить оверлей класса, а затем обработчик будет искать .closest('div.overlay') в качестве цели операции. 24.03.2011