2016-07-11 1 views
2

Привет У меня есть код последующие:Force нажмите с триггером() на ближайший DIV

$('.myInput').click(function() { 
 
    $('.addon').trigger('click'); 
 
}); 
 

 
$('.addon').click(function() { 
 
    console.log("Clicked"); 
 
});
.wrapper { 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
.inputWithAddon { 
 
    display: flex; 
 
    margin-bottom: 10px; 
 
} 
 
input { 
 
    height: 20px; 
 
} 
 
.addon { 
 
    width: 26px; 
 
    height: 26px; 
 
    background-color: green; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="wrapper"> 
 
    <div class="inputWithAddon"> 
 
    <input class="myInput"> 
 
    <div class="addon"></div> 
 
    </div> 
 
    <div class="inputWithAddon"> 
 
    <input class="myInput"> 
 
    <div class="addon"></div> 
 
    </div> 
 
    <div class="inputWithAddon"> 
 
    <input class="myInput"> 
 
    <div class="addon"></div> 
 
    </div> 
 
</div>

Я хотел бы, чтобы заставить щелчок trigger() на мой зеленый DIV, когда я нажал на входе. Это должно быть на div от текущего щелкнутого входа (с правой стороны). На данный момент он вызывает щелчок для всех зеленых div (смотрите консоль). Я хотел бы просто сделать это для div из щелкнутого ввода. Я попробовал closest():

$(this).closest('.addon').trigger('click'); 

Это не сработало.

Любые идеи?

Спасибо.

+0

Что такое проблема? См. Https://jsfiddle.net/cho912xp/ – Mohammad

+0

@Mohammad Это сбивает с толку ?! Вы видели мой фрагмент кода в вопросе? Когда вы нажимаете на один вход, он печатает 3 раза «щелкнули», для каждого зеленого div. У меня такая же проблема в моем веб-приложении. В скрипке, похоже, работает ?! – MrBuggy

+0

@Mohammad, но подождите, это не тот же код, что и мой ... Вы добавили сестры() к триггеру, похоже, это работает. – MrBuggy

ответ

3

Попробуйте использовать родственное свойство Jquery

$(this).siblings('.addon').trigger('click');

+0

Отлично, спасибо! Я буду отмечать его как можно скорее! Приветствия. – MrBuggy

2

Возможного SOLN будет:

$(this).parent().find('.addon').trigger('click'); 

или как @Mohammad упоминался кратчайшим:

$(this).next().trigger('click'); 

или @Deepak Singh ответил:

$(this).siblings('.addon').click(); 

или @freedomn-m упоминается (больше) макет решение: самостоятельный

$(this).closest(".inputWithAddon").find(".addon").click(); 

$('.myInput').click(function() { 
 
    $(this).next().trigger('click'); 
 
}); 
 

 
$('.addon').click(function() { 
 
    console.log("Clicked"); 
 
});
.wrapper { 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
.inputWithAddon { 
 
    display: flex; 
 
    margin-bottom: 10px; 
 
} 
 
input { 
 
    height: 20px; 
 
} 
 
.addon { 
 
    width: 26px; 
 
    height: 26px; 
 
    background-color: green; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="wrapper"> 
 
    <div class="inputWithAddon"> 
 
    <input class="myInput"> 
 
    <div class="addon"></div> 
 
    </div> 
 
    <div class="inputWithAddon"> 
 
    <input class="myInput"> 
 
    <div class="addon"></div> 
 
    </div> 
 
    <div class="inputWithAddon"> 
 
    <input class="myInput"> 
 
    <div class="addon"></div> 
 
    </div> 
 
</div>

+1

'parent(). Find ('. Addon')' do work of 'siblings ('. Addon')' – Mohammad

+0

@Mohammad сделал редактирование и добавил его тоже. – Iceman

+1

Вы можете использовать ['.next()'] (https://api.jquery.com/next/) вместо этого, чтобы выбрать следующий родной вход. – Mohammad