keyup()
- это ярлык для bind('keyup',callback)
, который зарегистрирует некоторый обработчик событий на элементах, которые уже присутствуют в DOM (не обязательно отображаются). Он не будет работать, если элемент отсутствует в DOM, когда он определен. Для этого вам необходимо использовать delegate()
, который будет прикреплять некоторый обработчик к элементу, который в настоящее время доступен или может быть доступен в будущем.
Начиная с jQuery 1.7, рекомендуется использовать on()
, поскольку он сочетает в себе функциональность bind/delegate/live.
на() можно использовать двумя способами
$(selector).on('event',callback);
$(parentSelector).on('event','someChildSelector', callback);
Сначала один обработчик является прямым и второй называется делегированы обработчик. Если вы используете первый для регистрации обработчиков событий, вы должны убедиться, что элемент присутствует в DOM во время регистрации, как bind()
. Поэтому, если вы добавляете новые элементы, вам придется снова присоединить этот обработчик.
Если вы используете второй путь, вам не придется беспокоиться о регистрации обработчика снова
$(document).on('click','.row',callback);
Как документ всегда доступен, вы обратный вызов будет зарегистрирован как обработчик щелчка для всех существующих строк и любой новой строки, которую вы можете добавить в будущем.
Я настоятельно рекомендую вам ознакомиться с разделом here. Они даже объясняют преимущества производительности.
Теперь, когда вы знаете, как это работает, вы можете исправить это, используя on()
либо как прямой обработчик, либо как делегированный обработчик.
EDIT: Лучше использовать ближайший статический родитель, чем документ/тело, при использовании on() для регистрации делегированных обработчиков. Спасибо Regent за то, что вы указали, что :)
$('closestStaticParent').on('keyup','#gallery-search',function(){
console.log('test');
});
Элемент '# gallery-search' существует на странице при добавлении момента запуска события« keyup »? – Regent
Спасибо Regent ... новичок-ошибка.Я скомпилировал весь html раньше, но на самом деле это не было передано в DOM до тех пор, пока приложение не будет прикреплено. И я предполагаю, что другое событие на самом деле позволяет мне это сделать, поскольку оно придает слушателю каждый щелчок в BODY, и THEN проверяет, был ли клик для целевого элемента. –
Добро пожаловать. Таким образом, вы также можете переключиться на делегированный обработчик событий: '$ (document) .on ('keyup', '# gallery-search', function() {'. [Делегированные обработчики событий docs] (http: // api. jquery.com/on/#direct-and-delegated-events). – Regent