2010-11-08 1 views
4

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

$("a.menu_filter_select").click(function(){ 
    var parent_filter = $(this).parent("tr"); 
    // Update value 
    parent_filter.find(".filter_value").html($(this).html()); 
}); 

Проблема в том, что он получает нулевое значение на $ (это), это неожиданное поведение, я не понимаю, почему это не работает, любая идея?

Вот консоль отладки с точки останова внутри метода:

$(this) 
> null 
this 
> <a class=​"menu_filter_select" href=​"http:​/​/​localhost:​3000/​#" rel=​"1">​test</a>​ 
+1

Вы можете отправить html-код этого раздела? Быстрое исправление будет заключаться в использовании .parents ("tr: eq (0)") – meo

+3

.parents() методы не могут быть вызваны, потому что $ (this) равно null – Alex

+0

да, я думаю, что есть ошибка html –

ответ

4

Я думаю, это потому, что ваша функция получает событие в качестве аргумента, и вам нужно event.target.

Я также рекомендую использовать closest вместо parent, так как ваш код будет работать, даже если кто-то ставит <b>, <i> или <span> вокруг якоря. Я также использую find вместо child.

Редактировать: Фактически, this в FireFox относится к объекту привязки, но я не могу точно сказать, что он реализован таким же образом в других браузерах. НО event.target может ссылаться на объект ребенка, если, скажем, документ, как это:

<a><b>some text</b> other text</a> 

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

$(a).click(function(event) { console.log(this, event.target); }); 

Попробуйте запустить этот код в FireBug , посмотри, как это работает.

+0

Спасибо много, этот работает! – Alex

0

Иногда связывание между $ и Jquery может потерпеть неудачу, попробуйте заменить $ с JQuery.

Также попробуйте использовать $ .log, а не точку останова, чтобы гарантировать, что область действия этого не меняется.

2

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

Вы можете проверить, есть ли функция $ == jQuery. Если это не так, то вы, вероятно, включили другой скрипт, который также использует идентификатор $.

Существует режим совместимости для jQuery, который будет использоваться, если есть другая библиотека, которая также использует этот идентификатор, где он возвращает значение идентификатора $ в его исходное значение, и вместо этого вы используете идентификатор jQuery.

+0

Спасибо, я проверю $ == jQuery в следующий раз, когда у меня возникнет такая проблема. – Alex

0

Лично я всегда использую $ при использовании jquery, но я видел, что это произошло, когда я включил плагин, который использовал jquery, а не $. По какой-то причине это не нравится использовать оба, но просто изменение jquery на $ в коде плагина отсортировано для меня.