javascript - цикл for для создания событий - PullRequest
0 голосов
/ 16 октября 2011

Я использую скрипт, в котором мне нужно сделать несколько событий, чтобы появилось всплывающее окно.

Я пробовал это, но это не работает:

for (i=0;i<=storingen;i++)
    {
        $("#storing" + i).click(function(){ centerPopup(); loadPopup(); });
    }

Вывод должен быть:

$("#storing0").click(function(){ centerPopup(); loadPopup(); });
$("#storing1").click(function(){ centerPopup(); loadPopup(); });
$("#storing2").click(function(){ centerPopup(); loadPopup(); });
$("#storing3").click(function(){ centerPopup(); loadPopup(); });

и т.д.

Но количество элементов div с сохранением идентификатора # (число здесь) является переменным, поэтому я хотел сделать это, но оно не работает ...

Я получаю переменную storingen из php:

<script type="text/javascript">aantalstoringen('.$aantalstoringen.')</script>

который я подбираю в js-файле так:

function aantalstoringen(storingen){
    storingen=storingen;
}

Я сделал предупреждение (storingen) , в котором прослежен правильный номер, так что все в порядке.

Может ли быть так, что цикл for не работает, потому что его нет в функции aantalstoringen , но в другой функции:

$(document).ready(function() {

Я использовал этот урок для создания javascript: http://yensdesign.com/2008/09/how-to-create-a-stunning-and-smooth-popup-using-jquery/#popup1 и сценарий, который вы получите, это: http://yensdesign.com/tutorials/popupjquery/popup.js

Ответы [ 5 ]

1 голос
/ 16 октября 2011

Вместо этого используйте селектор [name^="value"]:

$('[id^="storing"]').click(function(){ ... });

По сути, он говорит "найти все элементы, чей идентификатор начинается с" сохранения "."

Если вам это нужно более явно, вы можете проверить id внутри each(), чтобы применить лучшую фильтрацию. например,

$('[id^="storing"]')
  // make sure all IDs end in a number
  .each(function(i,e){
    if (/\d$/.test(e.id)) {
      // now that we only have ids that begin with storing and end in
      // a number, bind the click event
      $(e).click(function(e){ ... });
    }
  });
0 голосов
/ 16 октября 2011

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

Вот почему такие ребята, как jQuery, учат детей плохим манерам ... -.-

0 голосов
/ 16 октября 2011

Как правильно сказал Брэд, вам не нужно знать количество таких элементов, вы можете просто перебрать все элементы, имеющие id, начиная с чего-то.

Итак, ваш код будет:

$(document).ready(function() {
    $('[id^="storing"]').click(function() {
        centerPopup();
        loadPopup();
    });
});
0 голосов
/ 16 октября 2011

Сначала вы даете имя класса div, как class = "popupDiv".Затем вы пытаетесь что-то вроде этого

$('.popupDiv').live('click', function(){
      // var id = $(this).attr('id'); By doing so you will get the current id of the div too.
      centerPopup();
      loadPopup(); 
});
0 голосов
/ 16 октября 2011

Это может быть любое количество вещей.Было бы полезно, если бы вы показали нам больше кода, как и все функции aantalstoringen.

Следующее должно работать:

function aantalstoringen(storingen) {
    $(document).ready(function() {
        for (i=0;i<=storingen;i++) {
            $("#storing" + i).click(function(){ centerPopup(); loadPopup(); });
        }
    });
}

Тем не менее, это действительно плохой способсделать это.Я хотел бы, чтобы каждый из ваших элементов также включал class="storing".Тогда вам не нужно получать количество объектов с сервера:

$(document).ready(function() {
    $(".storing").click(function(){ centerPopup(); loadPopup(); });
});
...