2017-02-03 2 views
0

Я делаю программу, которая создает коробки, когда я нажимаю кнопку. У меня есть поле «model», поэтому, когда я нажимаю кнопку, он клонирует окно модели и меняет свой идентификатор.jQuery not selection element

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

Вот мой код:

$('#box-' + number).find('a').click(function(){ 
    alert('boop'); //function 
}); 

Variable 'число' это число коробки. Как я уже сказал, идентификатор меняется, когда я клонирую коробку модели.

Модель коробки что-то вроде этого:

<div id="box-model"> 
    <div class="box"> 
     <div class="heading"> 
     <a class="link-class">¡Click Me!</a> 
     </div> 
     <div class="body"> 
     CONTENT 
     </div> 
    </div> 
</div> 
+0

Это может быть просто из-за уровня абстракции, но вы бы лучше с помощью 'on' делегировать что-то вроде ...' $ (document) .on ("click", ". box a", function() {...}); '. Я не вижу ничего плохого в вашем примере, поэтому, возможно, создание окна из модели не работает. У вас есть сценарий или код? –

ответ

2

Вам необходимо использовать делегирование событий для присоединения событий к динамически добавленному элементу.

Поскольку идентификаторы генерируются динамически, вы не можете использовать их в качестве селектора при делегировании события. Вы можете rether использовать селектор класса целевых анкерных элементов внутри .header:

$('body').on('click','.heading a',function(){ 
    alert('boop'); //function 
}); 
+0

Это сработало. Благодаря! Но теперь, как я могу узнать окно, которое пользователь использует, чтобы щелкнуть ссылку? – Juanky

+0

Вы получите контекст щелкнутого элемента ('this') в нажатом событии. Вы можете преобразовать его в объект jquery и сделать нужным. –

-1
$("body").find('#box-' + number).find('a').click(function(){ 
    alert('boop'); //function 
}); 

Дело в том, JQuery загружен DOM, прежде чем окно генерируется. Предполагая, что этот код находится в вашем $ (документе) .ready (function()), ваши поля еще не созданы, когда документ готов. Вам нужно перейти к родительскому элементу «#box», который был сгенерирован в начале (он не должен быть телом)

+0

Это не работает. Вы не делегируете событие, вы по-прежнему привязываете его только к элементам, которые существуют во время создания события, независимо от того, используете ли вы существующий элемент, например 'body', чтобы найти их. [Вот пример.] (Https://jsfiddle.net/9f6qbnvb/2/) (я включил решение по этой ссылке, которое является * Событие делегирование *, как Milind Anantwar опубликовал выше.) – Santi