2013-02-20 3 views
0

Я пытаюсь отлаживать это некоторое время, и я не уверен, где все идет не так или что-то может повлиять на него. Код слишком велик, чтобы попытаться реплицировать, но я постараюсь как можно лучше объяснить, с чем я сталкиваюсь (я тоже не хотел использовать live, потому что он устарел).jQuery, используя вместо живого, дает неправильное «это» в обратном вызове

$(document).on('click', someSelector, function(evt) { 
    evt.preventDefault(); 

    // Do something 

    console.log(this); 
}); 

В console.log, я получаю # документ назад, и я не уверен, почему. Мне интересно, может ли это быть противоречивым с каким-то другим кодом, который у меня есть, хотя я не могу показать остальную часть кода, потому что он слишком большой, чтобы его копировать и вставлять сюда, поэтому я думаю об этом вопросе, что может быть причиной такое поведение? Лично я думал, что это было странно, но может ли кто-нибудь сказать мне, что может произойти, что вызывает такое поведение и почему jQuery может обрабатывать способы его обработки здесь? Любая помощь будет с радостью оценена. Благодаря!!!

+0

Что такое 'someSelector'? Можете ли вы опубликовать остальную часть своего кода или полный пример на http://jsfiddle.net/? – Blender

+0

эй блендер, вот jsfiddle, который может представлять интерес, хотя я не уверен, что он слишком много говорит о проблеме! http://jsfiddle.net/QFzzZ/ спасибо заранее –

ответ

2

Вы указали свой обработчик событий на $(document). Это делает this вашим document. Вы хотите посмотреть на evt.target вместо этого, если вам интересно, какой элемент вызвал событие.

+0

у меня есть что-то еще, и он работал отлично, и он мог нацелиться на «someSelector»; если бы я не ошибся, я думаю, что это был рекомендуемый способ реализации live on on, пожалуйста, исправьте меня, если я ошибаюсь, хотя –

+0

- это не лучший способ сделать это? http://api.jquery.com/live/ '$ (document) .on (события, селектор, данные, обработчик); // jQuery 1.7+ ' –

+0

Это хороший способ сделать это. Я просто говорю, что вам нужны жизни в 'evt.target', а не в' this'. 'this' будет элементом, в котором определяется обработчик, а не элементом, который принимает событие. Это как сказать своему другу Чарли, чтобы он сказал тебе свое имя всякий раз, когда он видел, как кто-то проходил по улице, а затем раздражался, когда он начал говорить: «Чарли, Чарли, Чарли ...» Все остальное, как и должно быть, ты просто пользуешься неправильная переменная. – Amadan

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