jquery. Событие динамических элементов - PullRequest
2 голосов
/ 12 сентября 2010

мой код и моя проблема:

<script type="text/javascript">
$(document).ready(function() {
  // this variable is used to set the dynamic elements
  tagFlag = '';

  $("#a1").click(function(event) {
      event.preventDefault();
      tagFlag = 'me';  // setting the element which I want to trigger later
  });

  $('#'+tagFlag).click(function(e) {
      // do sthing here
  });
});

</script>
</head>

<body>
<a href="">make the element</a>
<p id="me">some words here</p>
</body>
</html>

но. Когда я устанавливаю tagFlag, и нажимаю "p", ничего не происходит. Кстати. Есть ошибка, когда tagFlag ничего не было установлено..Как я могу получить то, что хочу?

Большое спасибо !!

Ответы [ 4 ]

0 голосов
/ 12 сентября 2010

Вы можете прикрепить обработчик .click() к document и проверить, была ли цель клика элементом, о котором вы заботились, подобно тому, как .live() ведет себя внутренне, например:

$(function() {
  var tagFlag = '';
  $("#a1").click(function(event) {
      event.preventDefault();
      tagFlag = 'me';
  });
  $(document).click(function(e) { 
    if(tagFlag &&                  //is it even set?
       (e.target.id == tagFlag || $(e.target).closest('#'+tagFlag).length)) {
          //do work here
    }
  });
});

Вы можете попробовать его здесь , единственное изменение в вашей разметке - это добавление дочернего элемента (чтобы показать, как работает кликирование / обработка кликов) и предоставление привязке a1 ID I думаю вы хотели, чтобы это было в вопросе.

В качестве альтернативы, если вы знаете набор элементов, по которым можно щелкнуть, задайте им класс и свяжите с ними обработчик, проверив идентификатор, как у меня выше ... или отмените привязку класса и каждый раз привязывайте к определенному идентификатору Есть несколько способов сделать это:)

0 голосов
/ 12 сентября 2010

Нет элемента с ID "a1".Если вы хотите, чтобы первый элемент привязки использовал вместо него

$.("a:eq(0)")

.

Если это не так, сообщите, пожалуйста.

0 голосов
/ 12 сентября 2010

используйте объект jquery и добавьте к нему элементы, по которым щелкнули:

$(document).ready(function() {
  $tagFlag = $("");

  $("#a1").click(function(event) {
    event.preventDefault();
    $tagFlag.add($(this));
  });

  $tagFlag.click(function(e) {
    // do sthing here
  });

});
0 голосов
/ 12 сентября 2010

Возможно, вам стоит взглянуть на метод jQuery live(), который назначит событие всем существующим и будущим элементам.

http://api.jquery.com/live/

...