Подтвердить что ты не робот

Добавить обработчик jQuery для нескольких элементов?

Мне нужно иметь цикл for внутри моего jQuery.

Пример:

  for(i=0;i<counter;i++)
   {
    $("div"+i+"").click(function(){//some code});
   }

Как я могу это сделать?


EDIT:

Этот код был отправлен OP в комментарии к одному из ответов:

$("#displayPanel div").click(function (){ alert($(this).attr("id")); } 

<div id="displayPanel" class="displayPanel"> 
  <div id="heading"> Display Panel </div> <br/> 
  <div id="save" class="saveClass"></div> <br/> 
  <div id="field1" class="my"> 
    <label id="labelstr1">Untitled1</label> 
    <input id="inputstr1" type="text"/> 
  </div> 
  <div id="field2" class="my"> 
    <label id="labelstr2">Untitled1</label> 
    <input id="inputstr2" type="text"/> 
  </div> 
</div>

Предупреждение показывает мне идентификатор для первых двух div, а не для field1 и field2.


Примечание:

field1 и field2 div создаются "на лету".

4b9b3361

Ответ 1

Вы можете поместить divs с общим классом

<div id="d1" class="your_css_class your_control_class">
<div id="d2" class="your_css_class your_control_class">
<div id="d3" class="your_css_class your_control_class">
<div id="d4" class="your_css_class your_control_class">
<div id="d5" class="your_css_class your_control_class">

$(".your_control_class").click(function(){
   var div_id=$(this).attr("id"); // gives you the ID of the clicked div
   if(div_id==="d1") functionForDiv1();
   else if(div_id==="d2") functionForDiv2();
   ...
});

EDIT:

Если у вас есть все внутри этого большого div, вы можете сделать:

$("#displayPanel > div").click(function(){
...

Ответ 2

Цикл кажется ненужным, так как селектор для div будет применяться ко всем div.

$("div").click(function(){
  //this will apply to any div you click on the page
  //for example:
  $(this).css('color','red'); //change the color of the div clicked to red
});

EDIT. Поскольку вы упоминаете в редактировании, что # field1 и # field2 создаются "на лету", вам нужно использовать .live(), чтобы связать событие click, как показано ниже:

$("#displayPanel div").live('click', function(){
  alert($(this).attr('id'));
});

Ответ 3

Вы можете, например, пропустить все div следующим образом:

$("div").each(function() {
    $(this).hide(); // this points to the current element
});

Ответ 4

Да, вы можете иметь цикл for в jQuery, но, глядя на ваш вопрос, вам может и не понадобиться. Когда вы используете

$('div').click(function(). { ... });

Вы можете связать функцию как обработчик события для всех div с одной командой. Вы также можете использовать context, имя класса или другие атрибуты для фильтрации разделов, к которым применяется обработчик событий.

Если вы хотите выполнить другое действие для каждого div, вам лучше всего иметь уникальный идентификатор для каждого div, а затем привязать обработчик событий, используя

$('#divId').click(function() { ... });

Ответ 5

Предполагая, что html

<div class="module">
  <div id="header1">h</div>
  <div id="content1">c</div>
</div>
<div class="module">
  <div id="header2">h</div>
  <div id="content2">c</div>
</div>
<div class="module">
  <div id="header3">h</div>
  <div id="content3">c</div>
</div>

Вы можете сделать цикл таким образом с помощью jquery: Например, когда вы нажимаете заголовок, содержимое скрывается.

$(".module").each(function(index){
   $("#header"+index).click(function(){
      $("content"+index).hide()
   });
});

Возможно, вам захочется взглянуть на jQuery.each(collection, callback (indexInArray, valueOfElement)) function http://api.jquery.com/jQuery.each/

Ответ 6

У этих div есть общий родитель, атрибут или что-то еще? Согласование по идентификаторам определенной формы (т.е. divXYZ в вашем случае), вероятно, не самая простая/самая очевидная вещь. Документация API для Selectors содержит полный список различных способов выбора элементов. Выберите тот, который наиболее подходит, и JQuery упрощается.

Здесь приведен пример выбора div с общим родительским:

$("#parent > div").click(function() {
    // some code
});

И для выбора div с общим атрибутом (если у них нет общего родителя, одно решение может давать каждому атрибуту cusotm):

$("div[fooAttribute]").click(function() {
    // some code
});