2013-11-10 3 views
3

Так что у меня это:пред() в «на» методе в JQuery

$(".change_cont").prev().click(function(e){ 
    alert("Hello World"); 
} 

Я хотел бы, чтобы это работало на вновь созданные элементы, как это:

$("body").on("click", $(".change_cont").prev(), function(){ 
    alert("Hello World"); 
} 

Это Безразлично» т работы. есть ли правильный синтаксис для этого или это просто невозможно?
Спасибо.

+1

Можете ли вы предоставить свой HTML-код и указать, какие элементы вы пытаетесь настроить? Технически в обычных селекторах вы не можете идти * назад *, но можете идти * вперед *. Таким образом, мы могли бы помочь в каком-то способе '#parent> .first-level .child + .target' способом – ahren

+0

По правде говоря, я всегда хотел использовать его с фактическим элементом, а не Струна! Это всегда казалось мне немного назад! Возможно, однажды это станет возможным. –

+0

@SolomonClosson, если вы говорите о делегированном синтаксисе, как вы можете использовать его с фактическим элементом, который еще не существует? – Alnitak

ответ

5

Вы пробовали следующее?

var myElementId = "#" + $(".change_cont").prev().attr("id"); 

$("body").on("click", myElementId, function(){ 
    alert("Hello World"); 
}); 

Для этого требуется, чтобы элемент имел идентификатор. Если это не так, вы можете использовать класс, я полагаю, если у него есть класс, назначенный ему. Если для этого элемента ничего не назначено, просто назначьте ему id или класс, чем.

Если на предыдущем элементе нет идентификационного класса или идентификатора, почему бы не создать его при создании элемента? В этом случае, вы бы просто добавить класс к ним, а не использовать имя класса вместо атрибута ID:

$(".change_cont").each(function(e){ 
    if (!$(this).prev().hasClass('myClass')) 
     $(this).prev().addClass('myClass'); 
}); 

$("body").on("click", ".myClass", function(){ 
    alert("Hello World"); 
}); 
+2

Я думаю, что OP означает, что предыдущий элемент будет динамическим и не имеет определенного класса или идентификатора или каких-либо идентифицирующих признаков, отличных от предыдущего брата '.change_cont' – ahren

+0

Конечно, вы имеете в виду' $ ("body"). On («click», «#» + myElementId, function() {' –

+0

Да, я исправил это, благодарю вас за то, что вы указали это. –

0

В Jquery апи http://api.jquery.com/on/ сказал, что второй аргумент selector должен иметь тип «String» , в вашем случае это объект jQuery, поэтому я думаю, что ваша привязка не будет работать.

0

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

function updateElements() { 
    $('.change_cont').prev().addClass('contClick'); 
} 

, а затем использовать этот класс в вашем делегированных обработчика:

$('body').on('click', '.contClick', function() { 
    ... 
}); 
0

Можно выбрать только следующий элемент, используя prev + sibling селектор. Проверьте, можно ли выбрать следующий элемент другого элемента и добиться того же результата.

$("body").on("click", ".change_cont_another + *", function(){ 
    alert("Hello World"); 
} 
Смежные вопросы