jQuery: выбрать текущее значение при нажатии на кнопку

374
19 января 2017, 05:15

День добрый! Есть вот такой шаблон который приходит аяксом при смене селекта

<table>
  <tr>
    <td>
      <div class="form-group">
        <div class="input-group">
          <input type="number" name="new_value[]" data-new-val class="form-control" data-id="{{ $current->id }}" data-type="{{ $current->type }}" />
          <div class="input-group-btn">
            <button type="button" class="btn btn-success" data-btn-new-val data-id="{{ $current->id }}"><i class="fa fa-plus"></i></button>
          </div>
        </div>
      </div>
    </td>
  </tr>
  <tr>
    <td>
      <div class="form-group">
        <div class="input-group">
          <input type="number" name="new_value[]" data-new-val class="form-control" data-id="{{ $current->id }}" data-type="{{ $current->type }}" />
          <div class="input-group-btn">
            <button type="button" class="btn btn-success" data-btn-new-val data-id="{{ $current->id }}"><i class="fa fa-plus"></i></button>
          </div>
        </div>
      </div>
    </td>
  </tr>
  <tr>
    <td>
      <div class="form-group">
        <div class="input-group">
          <input type="number" name="new_value[]" data-new-val class="form-control" data-id="{{ $current->id }}" data-type="{{ $current->type }}" />
          <div class="input-group-btn">
            <button type="button" class="btn btn-success" data-btn-new-val data-id="{{ $current->id }}"><i class="fa fa-plus"></i></button>
          </div>
        </div>
      </div>
    </td>
  </tr>
</table>

При нажатии на кнопку data-btn-new-val, надо получить значение которое введено в текстовое поле, которое находится рядом с этой кнопкой. Я получаю всегда значение из первого инпута, даже если нажал на кнопку для третьего инпута.

$(document).on('click','[data-btn-new-val]', function(e){
        e.preventDefault();
        var btnNewVal = $(this);
        var inputNewVal = $('[data-new-val]');
        var currentDataValue;
        inputNewVal.each(function(i,currentDataValue){
            console.log(currentDataValue);
            // Вот тут не могу получить значения из поля. Он выводит все значения.
            return currentDataValue;
        });
        $.ajax({
            url: "/api/v1/set-new-val",
            type: "post",
            dataType: "json",
            data: {
                id: currentDataValue.id,
                type: currentDataValue.type,
                val: currentDataValue.val
            },
            success: function(data)
            {
                console.log(data);
            }
        })
    });

Нашел один способ. Проверить в цикле. Но как вернуть массив потом, что бы отправить аяксом?

inputNewVal.each(function(currentDataValue){
            if($(this).data('id') == btnNewVal.data('id'))
            {
                currentDataValue = {
                    id: $(this).data('id'),
                    type: $(this).data('type'),
                    val: $(this).val()
                };
            }
            return currentDataValue;
        });
        console.log(currentDataValue); // тут пусто почему то
Answer 1

$(".button").on('click', function() { 
  var ss = jQuery(this).parent().find("input[type=text]").val(); 
  console.log(ss); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="form"> 
  <input type="text" /> 
  <input type="button" class="button" /> 
</div> 
<div class="form"> 
  <input type="text" /> 
  <input type="button" class="button" /> 
</div>

Если я вас правильно понял, вам нужно найти значение инпута, которое находится рядом с текущей кнопкой. jQuery(this) позволяет однозначно определить кнопку, даже если есть множество таких т.к. в this будет именно та кнопка, на которую нажали. C помощью .parent() перемещаемся к родительскому элементу (обычно это контейнер, который оборачивает и поле ввода и саму кнопку) и ищем ближайшее поле ввода (type=input).

Answer 2

попробуй через родительский элемент и в нем найти тот что тебе нужен:

var parent = $(this).parents('.input-group');
var input = parent.find('input[type="text"][name^="new_value"]').eq(0);
var input_value = input.val();
READ ALSO
Использование одной функции click

Использование одной функции click

Подскажите пожалуйста можно ли использовать одну функцию для нескольких задач

308
jquery.js передача параметра с кирилицей

jquery.js передача параметра с кирилицей

Есть таблица, пример: http://lavds-wordpresstw1

229
Наследование значений свойств в css (sass)

Наследование значений свойств в css (sass)

Вот типичная ситуация с абсолютно позиционированным элементом: То есть логика css такова, что при ховере свойство transform просто заменяется...

300
String после завершения метода

String после завершения метода

Имеется метод в классе Saves:

229