2017-02-09 2 views
0

У меня есть следующий jQuery, который не работает, и я думаю, что ответ может быть, потому что я использую «это» внутри «этого».jQuery это внутри этого

$('.field-name-field-choose-a-service input:checked').each(function() { 
    var unitname = $(this).closest('.form-item').text(); 
    $('.field-name-field-choose-a-package .form-type-checkbox').each(function() { 

     if($(this).children('.views-field-field-bookable-unit-type span').text() == unitname) { 
     $(this).show(); 

     } 
    }); 

    }); 

Как мне получить «это» только для того, что происходит в текущей функции?

Извините, если это недостаточно подробно, я немного новичок для jQuery!

+0

Что именно не работает? – Jer

+0

Вы можете кэшировать 'this' вне внутреннего' each'. Добавьте 'var $ checkedService = $ (this);' в начале внешнего 'each' и используйте это внутри' each'. – Tushar

ответ

2

Когда вы находитесь в контексте другого .each(), значение «это» изменяется в нем. Если вам нужна ссылка на «внешнее это», запишите его в переменную:

$('.field-name-field-choose-a-service input:checked').each(function() { 
    var outerThis = this; 
    var unitname = $(this).closest('.form-item').text(); 
    $('.field-name-field-choose-a-package .form-type-checkbox').each(function() { 
     // "this" refers to the "inner this" 
     // "outerThis" refers to the "outer this" 
    }); 
}); 

});

+0

Я думаю, что OP хочет кэшировать '$ (this)', так что методы jQuery могут быть вызваны на него напрямую. – Tushar

+0

Спасибо, что сделал. Я приму это, когда смогу. – Collins

0

Try хранения $(this) элемент в переменной, а затем использовать переменную вместо $(this)

+0

См. [Как отформатировать мои кодовые блоки?] (// meta.stackoverflow.com/q/251361). На данный момент я отредактировал ответ. – Tushar

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