2010-09-12 2 views
2

моего кода и моя проблема:jquery.Event динамических элементов

<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> 

but.when я установил tagFlag, и не нажмите «р» ничто не happen.BTW.there является ошибкой, когда tagFlag был ничего не устанавливайте. Так как я могу получить то, что хочу?

спасибо!

ответ

0

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

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

+0

Это не поможет. – SLaks

+0

Я пробовал это раньше. Метод Live() ничего не меняет .... И если я установил tagFlag = ''; Я получил эту ошибку: uncaught exception: Синтаксическая ошибка, нераспознанное выражение: # – qinHaiXiang

0

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

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

вместо этого.

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

0

использовать объект JQuery и добавьте кликали элементы к нему:

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

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

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

}); 
+0

Это не сработает, событие 'click' будет привязано к никаким элементам ... помните, что вы привязываетесь к ссылкам элементов в объекте jQuery, когда '.click()' выполняется, добавление элементов позже не добавит к ним обработчик событий. –

+0

ОК, это правильно. Сожалею... – elektronikLexikon

0

Вы можете прикрепить .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 
    } 
    }); 
}); 

You can give it a try here, единственное изменение в разметке является добавление дочернего элемента (показать щелчок бульканье/обработки рабочий) и давая ANC hor что a1 ID I думаю вы предназначались для этого в вопросе.

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

Смежные вопросы