2014-08-25 3 views
0

У меня есть раскрывающееся окно начальной загрузки, которое я пытаюсь заполнить. Думаю, вы бы назвали заголовок значением, вроде того, что вы увидите в обычном выпадающем списке html. Поэтому пользователь знает, что они выбрали в меню.JQuery, проходящий вниз, а не вниз

Моя проблема в том, что если у вас более одной страницы на странице, jquery будет нацеливать их обоих, а не только ту, которую я выбираю. Обычно я бы это исправить, добавив $(this).parent(), но HTML является немного более сложным, и я на самом деле, а не делать цепочку .parent().parent().parent()

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

мой HTML выглядит

<p><label class="control-label" data-bind="html: label"></label></p> 
<div class="dropdown" data-bind="cssProperties: properties, css: { hidden : EvalDisplay() == false }"> 
    <button class="btn btn-default dropdown-toggle col-md-12 dropBtn" type="button" id="dropdownMenu1" data-toggle="dropdown"> 
     <span class='pull-left' data-bind="value: value,attr: { 'name' : id}"></span> 
     <span class="caret pull-right"></span> 
     <p class='clearfix'></p> 
    </button> 
    <ul class="dropdown-menu side-dropdown" role="menu"> 
     <!-- ko foreach: options --> 
      <li role="presentation"><a role="menuitem" tabindex="-1" data-bind="html: Value"></a></li> 
     <!-- /ko --> 
    </ul> 
    <p class='clearfix'></p> 
</div> 

и мой JQuery выглядит следующим образом

$(".dropdown-menu li a").click(function(){ 
    $(".dropBtn.btn:first-child").html('<span class="pull-left">'+$(this).text()+'</span><span class="caret pull-right"></span>'); 
    $(".dropBtn.btn:first-child").val($(this).text()); 
}); 

и jsfiddle играть с http://jsfiddle.net/0p1Lhzq0/

Я играл с parentsUtil(), а также, но это просто не кажется правильным.

Любая помощь была бы замечательной!

+0

Почему вы хотите, чтобы избежать '.parent()' цепь? –

+0

Я действительно просто хочу избежать массивной строки .parent() – zazvorniki

+1

, как правило, это делается с помощью '.closest()'. – Barmar

ответ

1

Используйте это:

$(".dropdown-menu li a").click(function(){ 
    $(this).closest('.dropdown').find('.btn:first-child').html('<span class="pull-left">'+$(this).text()+'</span><span class="caret pull-right"></span>').val($(this).text()); 
}); 

Corrected fiddle

+0

Это, похоже, не хочет работать в скрипке, хотя ... http://jsfiddle.net/0p1Lhzq0/2/ – zazvorniki

+0

это должно быть '.dropdown', не '.dropBtn', так как' .dropBtn' не является предком 'li a'. – Barmar

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