Проблема с селекторами

258
29 марта 2017, 16:57

У нас есть n-блоков !В каждом есть селекторная выборка!Проблема в том что если я выбираю из списка в 1 блоке , то значения передаються и всем следующим!Как исправить?

$('.iteaminfo select').on('click',function(){ 
       var iteamval = $(this).val(); 
       if(iteamval==1){ 
          var iteaminf = $('#itm_info_1').text(); 
           $('.p_info').text(iteaminf); 
           var iteamcost = $('#itm_cost_1').text(); 
           $(".cost").text(iteamcost); 
       } 
       if(iteamval==2){ 
          var iteaminf = $('#itm_info_2').text(); 
           $('.p_info').text(iteaminf); 
           var iteamcost = $('#itm_cost_2').text(); 
           $(".cost").text(iteamcost); 
       } 
       if(iteamval==3){ 
          var iteaminf = $('#itm_info_3').text(); 
           $('.p_info').text(iteaminf); 
           var iteamcost = $('#itm_cost_3').text(); 
           $(".cost").text(iteamcost); 
       } 
   });
.hide_block{ 
    display: none; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="iteaminfo"> 
                            <h3>Двигуни</h3> 
                            <select name="motor" id="motor"> 
   <option selected  value="1">Двигун Комплектний 2.2CDi 313</option> 
   <option value="2">Двигун Комплектний 2.9 Tdi 312</option> 
   <option value="3">Голий двигун </option> 
   </select> 
        <div class="hide_block"> 
            <p id="itm_info_1">Двигун Комплектний 2.2CDi 313</p> 
            <p id="itm_info_2">Двигун Комплектний 2.9 Tdi 312</p> 
            <p id="itm_info_3">Голий двигун</p> 
            <p id="itm_cost_1">2000</p> 
            <p id="itm_cost_2">2000</p> 
            <p id="itm_cost_3">1300</p> 
        </div> 
                            <p class="p_info">Виберіть двигун зі списку вище!</p> 
                        </div> 
 <div class="iteaminfo"> 
                            <h3>Двигуни</h3> 
                            <select name="gov" id="motor"> 
   <option selected  value="1">Двигун Комплектний 2.2CDi 313</option> 
   <option value="2">Двигун Комплектний 2.9 Tdi 312</option> 
   <option value="3">Голий двигун </option> 
   </select> 
        <div class="hide_block"> 
            <p id="itm_info_1">Двигун Комплектний 2.2CDi 313</p> 
            <p id="itm_info_2">Двигун Комплектний 2.9 Tdi 312</p> 
            <p id="itm_info_3">Голий двигун</p> 
            <p id="itm_cost_1">2000</p> 
            <p id="itm_cost_2">2000</p> 
            <p id="itm_cost_3">1300</p> 
        </div> 
                            <p class="p_info">Виберіть двигун зі списку вище!</p> 
                        </div>

Answer 1

Если с Вашим кодом + небольшие правки, то :

$('.iteaminfo select').on('click',function(){ 
  var iteamval = $(this).val(), 
      wrap = $(this).closest('.iteaminfo'), 
      info = wrap.find('.p_info'), 
      cost = wrap.find('.cost'); 
   
  if(iteamval==1){ 
    var iteaminf = wrap.find('.itm_info_1').text(); 
    info.text(iteaminf); 
     
     var iteamcost = wrap.find('.itm_cost_1').text(); 
     cost.text(iteamcost); 
  } 
   
  if(iteamval==2){ 
    var iteaminf = wrap.find('.itm_info_2').text(); 
    info.text(iteaminf); 
     
     var iteamcost = wrap.find('.itm_cost_2').text(); 
     cost.text(iteamcost); 
  } 
   
  if(iteamval==3){ 
    var iteaminf = wrap.find('.itm_info_3').text(); 
    info.text(iteaminf); 
     
     var iteamcost = wrap.find('.itm_cost_3').text(); 
     cost.text(iteamcost); 
  } 
});
.hide_block{ 
    display: none; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="iteaminfo"> 
  <h3>Двигуни</h3> 
  <select name="motor" class="motor"> 
    <option value="1" selected>Двигун Комплектний 2.2CDi 313</option> 
    <option value="2">Двигун Комплектний 2.9 Tdi 312</option> 
    <option value="3">Голий двигун </option> 
  </select> 
  <div class="hide_block"> 
    <p class="itm_info_1">Двигун Комплектний 2.2CDi 313</p> 
    <p class="itm_info_2">Двигун Комплектний 2.9 Tdi 312</p> 
    <p class="itm_info_3">Голий двигун</p> 
    <p class="itm_cost_1">2000</p> 
    <p class="itm_cost_2">2000</p> 
    <p class="itm_cost_3">1300</p> 
  </div> 
   
  <p class="p_info">Виберіть двигун зі списку вище!</p> 
  <div class="cost">цена</div> 
</div> 
   
<div class="iteaminfo"> 
    <h3>Двигуни</h3> 
    <select name="gov" class="motor"> 
     <option selected  value="1">Двигун Комплектний 2.2CDi 313</option> 
     <option value="2">Двигун Комплектний 2.9 Tdi 312</option> 
     <option value="3">Голий двигун </option> 
     </select> 
    <div class="hide_block"> 
      <p class="itm_info_1">Двигун Комплектний 2.2CDi 313</p> 
      <p class="itm_info_2">Двигун Комплектний 2.9 Tdi 312</p> 
      <p class="itm_info_3">Голий двигун</p> 
      <p class="itm_cost_1">2000</p> 
      <p class="itm_cost_2">2000</p> 
      <p class="itm_cost_3">1300</p> 
    </div> 
   <p class="p_info">Виберіть двигун зі списку вище!</p> 
  <div class="cost">цена</div> 
</div>

P.S: id - уникальный идентификатор, может быть только в ед. числе на странице.

Или так например:

$('.iteaminfo select').on('click',function(){ 
   
      var  
      iteamval = $(this).children(":selected").html(), 
      wrap = $(this).closest('.iteaminfo'), 
      price = $(this).children(":selected").data('price'), 
      info = wrap.find('.p_info'), 
      cost = wrap.find('.cost'); 
   
      info.text(iteamval); 
      cost.html(price); 
 
});
.hide_block{ 
    display: none; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="iteaminfo"> 
  <h3>Двигуни</h3> 
  <select name="motor" id="motor"> 
    <option value="1" selected data-price="2000">Двигун Комплектний 2.2CDi 313</option> 
    <option value="2" data-price="2000">Двигун Комплектний 2.9 Tdi 312</option> 
    <option value="3" data-price="1300">Голий двигун </option> 
  </select> 
   
  <p class="p_info">Виберіть двигун зі списку вище!</p> 
  <p>Ціна: <div class="cost"></div></p> 
</div> 
   
<div class="iteaminfo"> 
    <h3>Двигуни</h3> 
    <select name="gov" id="motor"> 
     <option value="1" selected  data-price="2000">Двигун Комплектний 2.2CDi 313</option> 
     <option value="2" data-price="2000">Двигун Комплектний 2.9 Tdi 312</option> 
     <option value="3" data-price="1300">Голий двигун </option> 
     </select> 
   <p class="p_info">Виберіть двигун зі списку вище!</p> 
   <p>Ціна: <div class="cost"></div></p> 
</div>

Answer 2

Думаю как то так:

$('.iteaminfo select').click(function() {
   var self = $(this),
   pInfo = $('.p_info', self.parent()),
   //pCost = $(".cost"),
   val = self.val(),
   info = $('#itm_info_' + val),
   cost = $('#itm_cost_' + val);
   pInfo.text(info);
   //pCost.text(cost);
   return false;
});

А вообще не понимаю зачем вам столько классов и идов. ненадо так делать, когда у вас есть конкретные теги и их содержимое.

READ ALSO
Добавление текста из полей input в textarea jquery

Добавление текста из полей input в textarea jquery

Совершенно недавно начал изучать руби и jqueryСтолкнулся с проблемой вроде все просто, но что-то не получается

356
Обработчик по нажатию кнопки, который в базе данных поменяет значение jquery

Обработчик по нажатию кнопки, который в базе данных поменяет значение jquery

Необходимо при нажатии так скажем поменять время в таблице на Timenow

250
Unexpected token -

Unexpected token -

Почему вattr() тригерится ошибка Unexpected token -? Где там вообще дефис?

323
Как проверить что class = &ldquo;X&rdquo; и заменить X на Y?

Как проверить что class = “X” и заменить X на Y?

Всем привет, подскажите пожалуйста где ошибка

305