Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как задать функцию на клик с параметрами в виде значений (https://javascript.ru/forum/events/54233-kak-zadat-funkciyu-na-klik-s-parametrami-v-vide-znachenijj.html)

Kot137 10.03.2015 01:48

Как задать функцию на клик с параметрами в виде значений
 
Здравствуйте!
Как задать функцию на клик с параметрами в виде значений, а не в виде переменных? Поясню:

У меня есть множество однотипных элементов box0..box100, нужно чтобы по клику на любой из них выполнялась функция, в которую нужно передать номер элемента.
Если сделать так:
for(s=0; s<101; s++){
  $("#box"+s).click(function(){mapzoom(s);});
}
,
то при клике в mapzoom передастся текущие значение s, не зависимо от нажатого элемента.
А мне нужно, чтоб при нажатии, например, на box16 в mapzoom передавалось 16.
Посоветуйте пожалуйста красивое решение :cray:

Kot137 10.03.2015 02:07

Пока зделал вот-так, работает, конечно, нормально
$("#box"+s).attr("onclick", "mapzoom("+s+");");

Но, вопрос открытый. При назначении функций через JQ, как зафиксировать значения в цикле?

laimas 10.03.2015 04:45

А переменная, это не значение? :)

Номер, это собственно индекс элемента в наборе, по которому произведен щелчок. В jQuery есть метод возвращающий индекс - index(). А чтобы работать с индексами, нужно обращаться к коллекции.

$("#box"+s).attr("onclick", "mapzoom("+s+");"); - это несуразица, и нужно, например, для элементов с классом "myclass" поступить так:

$('div.myclass').click(function() {
    func($(this).index())
})


Если работать с id элементов и при этом номер привязанный к id может быть и не последовательным, то лучше задавать имена id например так - box-0, box-6, box-7... Такой селектор удобен для выбора среди boxmain и прочих:

$('[id|=box]').click(function() {
    func(this.id.split('-').pop())
})

Kot137 11.03.2015 19:00

Цитата:

Сообщение от laimas (Сообщение 360437)
$('[id|=box]').click(function() {
    func(this.id.split('-').pop())
})

Благодарю за отличный пример!


Часовой пояс GMT +3, время: 17:04.