2013-05-10 14 views
2

У меня есть div, где я запускаю цикл for. Создает нижеследующие divs в зависимости от количества строк в полях.невозможно вызвать функцию jquery при событии Click

<div class="parent"> 
       <p style=" font-family: Times New Roman;color:#a0a0a0; "> 
         Content 1 goes here......... 
       </p> 
       <div class="child"> 
         <span> <a class="likebtn">Like</a> </span>1 people like this  
       </div> 
      <hr/> 
</div> 

выше показано DIV в для-каждого контура т.е. создания нескольких дивы же, как это с различным содержанием на нем.

Теперь я пытаюсь вызвать функцию jquery, если пользователи нажимают на любую кнопку, находящуюся в div. Я попробовал функцию ниже, но моя функция не звонит. Пожалуйста, помогите мне, почему в связи с этой проблемой.

<script type="text/javascript">   
     $('.parent .child .likebtn').click(function(e) 
     { 
      alert("function called"); 
     }); 
</script> 

И одна вещи, отд-х создаются динамически, если я пишу выше яваскрипт кода только после того, как мой обмена на каждый цикл, то моя функция вызывалась. Неправильно использовать javascript-функцию в контроллере. Я использую рамки COdeigniter. Plase помочь мне, я должен указать эту функцию как в голове или теле

+0

Является ли это динамически созданный PHP или JQuery? Каждый термин меня путает. –

+0

@ Karl-AndréGagnon Да, это динамическое создание php в моем классе контроллера. Я использую frameworkignign framework. Я добавил несколько моментов в моем вопросе выше. Пожалуйста, прочтите это. –

+0

Может быть, родитель является зарезервированным словом .... попытайтесь изменить имя родителя класса на родительский ... только для отладки – Hackerman

ответ

5

Если DIV-х создаются динамически, их называют как

$(document).on('click', '.parent .child .likebtn', function(e) 
    { 
     alert("function called"); 
    }); 
+0

Да, теперь его работа. Мои divs создаются динамически, я забываю это сказать. Я хочу знать, почему упоминать вашу функцию таким образом, если divs создаются динамически? –

+0

Вы не можете назначить обработчик кликов для элемента, который еще не существует (ваши элементы там не установлены в DOM). Посмотрите на «делегирование событий», это поможет :) – tymeJV

+0

Чтобы добавить к комментарию tymeJV, использование синтаксиса в этом ответе фактически связывает событие с документом, который существует, по сравнению с теми элементами, которые еще не существуют, которые будут запускаться это событие. –

1

Оберните функцию в корпус, чтобы убедиться, что он запускается на выполнение после того, как ваш DOM полностью загружен так:

$(function() { 
    $('.parent .child .likebtn').click(function(e) { 
     alert("function called"); 
    }); 
}); 

EDIT: Вы загружаете этот контент из AJAX? В этом случае вам нужно использовать функцию .on(), чтобы убедиться, что новые элементы dom получают события, синтаксис somethign следующим образом: $ (document) .on (события, селектор, данные, обработчик); -> api.jquery.com/on

EDIT 2: Тот же ответ, как tymeJV

+0

Ему не нужно, так как это до закрытия тега body. –

+0

Я пробовал, но его не вызывали. И одно, если я напишу свой выше код javascript сразу после моего цикла for-each, моя функция будет вызвана. Неправильно использовать javascript-функцию в контроллере. Я использую рамки COdeigniter. Plase помогите мне, я должен указать эту функцию либо в голове, либо в теле –

+0

Вы загружаете этот контент из AJAX? В этом случае вам нужно использовать функцию .on(), чтобы убедиться, что новые элементы dom получают события, синтаксис somethign следующим образом: $ (document) .on (события, селектор, данные, обработчик); -> http://api.jquery.com/on/ – Dan

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