2014-08-31 2 views
0

У меня есть такой код,Jquery Живая Selector

<div class="panel-footer"> 
    <div class="post-activity"> 
     <i class="loading-icon"></i> 
     <button onclick="ChangeColor(this);">Change Color</button> 
    </div> 
//Will be code 
</div> 

Когда мой проект работает, и я нажимаю на элемент запуска, я код изменился STATU как это,

<div class="panel-footer"> 
    <div class="post-activity"> 
     <i class="loading-icon"></i> 
     <button onclick="ChangeColor(this);">Change Color</button> 
    </div> 
    <div class="comments-ch"></div> 
</div> 

И моя функция ,

function ChangeColor(element) 
{ 
    $(element).closest(".panel-footer").find(".comments-ch").css("background-color","#CC0000"); 
} 

не работает. Потому что, <div class="comments-ch"></div> является живым/добавленным/новым кодом.

Но если я запускаю этот код, он работает

function ChangeColor(element) 
{ 
    $(element).closest(".panel-footer").find(".post-activity").css("background-color","#CC0000") 
} 

<div class="post-activity">...</div> bacause коды существовавшего до запуска приложения.

Как я могу получить код append/live (.comments-ch)? Благодарю.

+0

Возможный дубликат [jQuery 1.9 .live() не является функцией] (http://stackoverflow.com/questions/14354040/jquery-1-9-live-is-not-a-function) – Vucko

+0

live has были обесценены, сначала обновите это, а затем просмотрите делегированные события. –

+0

Вы хотите изменить CSS элемента перед его существованием? Это невозможно. Если нет, 'ChangeColor' будет работать до тех пор, пока элемент существует * в данный момент * обработчик события * называется *. –

ответ

0

Прямую синтаксис, как правило, следующим образом

$(".selector-class").live('event', function() { 
    //do your logic here 
} 

В мероприятии часть может быть нажать (щелчки элемент), KeyUp, KeyDown и т.д.

Приветствия

+1

И как это связано с проблемой OP? –

0

Я хотел бы предложить вам, чтобы избавиться от onclick обработчик событий в вашей разметке, по крайней мере, это будет держать разметку отдельно от javascript (см. Это discussion для получения дополнительной информации). Так что ваша кнопка изменения должны выглядеть следующим образом:

<button id="btnChange">Change Color</button> 

И в JavaScript коде (который должен быть выполнен на DOM готов):

$("#btnChange").click(function() { 
    ChangeColor(this); 
}); 
function ChangeColor(element) 
{ 
    $(element).closest(".panel-footer").find(".comments-ch").css("background-color","#CC0000"); 
} 

Вы можете объединить 2 функции в одном, я все это просто для внесения наименьших изменений в ваш код это возможно. Работает demo.

+0

Как это решить проблему OP? –

+0

Отлично. «Как я могу получить код append/live (.comments-ch)?» - демонстрация показывает, как это сделать и работает так, как ожидалось. –

+0

Из комментариев кажется, что OP меняет CSS * перед * добавлен новый элемент, и он как-то хочет ретроактивно применить изменение CSS после добавления элемента. Я думаю, что это означает утверждения. Он уже, похоже, знает, как добавлять новые элементы и как выбирать существующие элементы. Но, конечно, я тоже ошибаюсь. –