2012-02-15 4 views
0

Я написал обработчик событий, который обнаруживает изменение в списке опций выбора, а затем изменяет несколько входов соседа на основе выбранного значения.Как я могу выделить селектор неявной области?

Теперь я хочу обобщить эту функциональность, чтобы одновременно использовать несколько групп (вождение-выбор-опции-списки + братья и сестры). Новый обработчик OnChange может выглядеть следующим образом:

$('.select-list').on('change', handleChange); 

А метод что-то вроде этого:

function handleChange(event){ 
    $parent = $(event.delegateTarget).closest('.parent'); 
    var parentId = '#' + $parent.attr('id'); 

    $(parentId + '.foo').flyAway(); 
    $(parentId + '.bar').destroy(); 
    $(parentId + '.bax').render(); 
    $(parentId + '.qux').doAGiggy(); 
    $(parentId + '.lorem').applyPerfume(); 
    $(parentId + '.ipsum').eatBetter(); 
    // ... several times 
} 

Я предпочел бы не повторить parentId часть в течение обработчика, как это грязно и трудно поддерживать. Есть ли способ дать моим селекторам неявный объем, то есть $('.a-class') знает, что parent-id Я ожидаю, что он «работает» внутри?

+0

Этот код является недействительным и не делать ничего. Что ты пытаешься сделать? – gdoron

+0

Кто черт возьми этот материал? –

+0

Извинения, обработчик не имеет значения. Я изменил сообщение - важно то, что я не хочу повторять «parentId» в селекторе. Я бы предпочел, чтобы каждый селектор «понимал» контекст, поскольку он является общим. Существует ли такая вещь? –

ответ

2

Предполагая, что вы делегирует событие (как это предлагается за счет использования на .on()) со следующими код:

$('.parent-container').on('change', '.select-list', handleChange); 

Объект мероприятия имеет delegateTarget Недвижимость.

Описание: Элемент, в который был присоединен обработчик события jQuery в настоящее время.

Так что вы можете сделать:

function handleChange(event){ 

    $(event.delegateTarget).find('.a-class').doStuff(); 
    // .. now use a similar selector $(parentId + ..) several times 
} 
+0

Спасибо, эта информация действительно помогла мне сделать код более приятным. Какой мой (плохо сформулированный вопрос) действительно есть, есть ли способ, которым я не должен повторять часть parentId селектора. Мой отредактированный пример выше, если вам нужна дополнительная информация. –

+0

Действительно, вопрос сейчас совершенно другой :-) –

+0

Что-то вроде '$ (parentId) .find ('. A-class, .a-class1, .a-class2, .a-class3'). DoStuff() ; '(вы должны рассмотреть возможность использования чего-то другого, чем« class1 »,« class2 »... делает бесполезным выбор по классу. –

0

Вы можете область применения JQuery селекторы, передавая его родителя в качестве второго аргумента в функции $:

$('.a-class', parent).doStuff(); 
$('.another-class', parent).doOtherStuff(); 
Смежные вопросы