2015-11-10 1 views
-1

Я пытаюсь модернизировать некоторый код, который использует устаревшую функцию .live(). Однако один вызов использует переменную в селекторе, и я не уверен, как правильно перевести это в синтаксис .on(). Осуждается код:Переменные в селекторе при преобразовании .live() в .on()

$('.selector .item a', $cal_fields).live('click', function(){ 
     //do stuff 
    }); 

И моя начальная (неудачная) попытка преобразовать его в .on() был:

$('body').on('click','.selector .item a, '+$cal_fields, function() 

$ cal_fields переменной присваивается начальное назначение

var $cal_fields  = $('#calendar_fields'); 

ответ

0

Для этого вам необходимо emulate только то, что .live() делает. Когда вы звоните .live(), то, что фактически происходит, что jQuery привязывает событие к document, а затем проверяет, соответствует ли event.target вашему селектору.

Еще одна проблема с вашей переменной $cal_fields. Поскольку #calendar_fields (возможно) не существует, когда страница загружается, нам нужно будет переоценить этот селектор каждый раз, чтобы получить элементы.

Таким образом, вы можете попробовать что-то вроде этого:

$(document).on('click', $cal_fields.selector+' .selector .item a', function(){ 
}); 

$cal_fields.selector возвратит вам строку, используемую, чтобы сделать что JQuery объект (селектор).

Кроме того, $('.selector .item a', $cal_fields) - это просто сокращенный вариант для $cal_fields.find('.selector .item a'), поэтому '#calendar_fields .selector .item a' должен быть эквивалентным.

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