2010-05-14 3 views
1

Я делал динамический эффект на DIV, используя JQuery, когда обнаружил, что
возвращаемое значение this.id варьировалось от функции к функции.
что это такое.

Я получил два набора простых тегов DIV родитель-ребенок, как это:

 <DIV ID="row"> 
     <DIV ID="c1">    
     <Input type="radio" name="testing" id="testing" VALUE="1">testing1 
     </DIV> 
     </DIV> 
     <DIV ID="row"> 
     <DIV ID="c2">    
     <Input type="radio" name="testing" id="testing" VALUE="2">testing2 
     </DIV> 
     </DIV> 

Код 1.

$('#row DIV').mouseover(function(){ 
radio_btns.each(function() { 
$('#row DIV).addClass('testing'); // worked 
}); 
}); 


Код 2.

$('#row DIV').mouseover(function(){ 
var childDivID = this.id; 
radio_btns.each(function() { 
$('#'+childDivID).parent('DIV').addClass('testing'); // didn't work 
}); 
}); 


Я надеваю Не понимаю, почему может работать только первый код
и выделил все «строки» DIV,
, но второй код не смог этого сделать?

+0

возможный дубликат [Javascript проблемы области видимости, когда лямбда-функция относится к переменной (http://stackoverflow.com/questions/2828718/javascript-scope-problem-when-lambda-function-refers-to-a-variable-in-enclosing -l) –

+0

Вы имеете в виду «но * второе * код не смог этого сделать "? – edwin

+1

У вас не может быть два элемента с одним и тем же идентификатором на одной странице. – edwin

ответ

3

Во-первых, у вас есть такой же идентификатор несколько раз, это приведет к разного рода странным поведением, так как это недопустимый HTML.

Как только это исправить, для второго примера кода, вам необходимо скорректировать, чтобы выделить текущую строку на парении (обратите внимание .row теперь класс для устранения проблемы ID), like this:

$('.row div').mouseover(function(){ 
    $('#'+this.id).parent('div').addClass('testing'); 
});​ 

Однако, есть лучший способ пойти об этом, так как у вас уже есть ссылка на объект, like this:

$('.row div').mouseover(function(){ 
    $(this).addClass('testing'); 
});​ 

Вообще говоря, я не могу думать о том случае, когда вы хотите использовать $("#"+this.id), если вы есть this, он должен быть $(this), чтобы получить объект jQuery, который вы хотите. более

Один пункт, вне вопрос на самом деле, если вы хотели зависать в этом случае использовать .hover() и .toggleClass(), like this:

$('.row div').hover(function(){ 
    $(this).toggleClass('testing'); 
});​ 
+0

Почему это .row вместо #row? Разнообразны ли они в значении в JQuery? – user327712

+0

@kwokwai - они, '.row' ищут элементы с' class' строки, '# row' ищет элементы с' id' строки. –

1

попробовать это:

var childDivID = $(this).attr('id');