Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не могу разобраться с .prev() (https://javascript.ru/forum/misc/61485-ne-mogu-razobratsya-s-prev.html)

Alex_dark74 20.02.2016 11:40

Не могу разобраться с .prev()
 
Есть код на странице для теста:
<input class="prev_max" />
<input />
<input id="test" onblur="select_prev_tr_tale(this.id)" />
Если делаю так
function select_prev_tr_tale(id){ //Редактирует предыдущий input MAX
  test = $('#'+id).prev();
  console.log(test);
}


Все ок! Выбирает
<input />
Но если делаю так
function select_prev_tr_tale(id){ //Редактирует предыдущий input MAX
  test = $('#'+id).prev(".prev_max");
  console.log(test);
}

Не выбирает ничего, хотя должен выбрать
<input class="prev_max" />
Или я чего то не догоняю?

AciDWarrioR 20.02.2016 12:18

Alex_dark74,
Ну вы посмотрите какой элемент у вас выбирает? Непонятно что у вас за блок с #+id. Ссылка .prev()
Можете использовать
test = $('#'+id).prevAll(".prev_max");

PS: отформатируйте пожалуйста код.

Alex_dark74 20.02.2016 12:46

function select_prev_tr_tale(id){ //Редактирует предыдущий input MAX
test = $('#'+id).prev(".prev_max");
console.log(test);
}

AciDWarrioR 20.02.2016 12:51

Alex_dark74,
Я вам написал, попробуйте выбирать prevAll().
prev() выбирает предыдущий элемент. У вас идут три inputa подряд, а вам нужен первый. Используйте prevAll().

Alex_dark74 20.02.2016 14:33

мне нужен не первый а предыдущий с слассом ".prev_max"

destus 20.02.2016 17:28

Alex_dark74,
prev возвращает только непосредственно предыдущий родственный элемент, а не все родственные элементы.
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <input class="prev_max" />
    <input />
    <input id="test" type="text" />
    <script>
         $(function () {
             $('#test').on('blur', function (e) {
                 $(this).prevAll('.prev_max').focus();
             })
         })
    </script>

Alex_dark74 20.02.2016 20:30

Спасибо за отклики ребята.
.prevAll('.prev_max')
работает но не так как мне нужно.
допустим есть
<input class="prev_max" id="test1" onblur="select_prev_tr_tale(this.id)" />
<input class="prev_max" id="test2" onblur="select_prev_tr_tale(this.id)" />
<input class="prev_max" id="test3" onblur="select_prev_tr_tale(this.id)" />
при использовании функции на самом нижнем input с id="test3" выбираются все input-ы с классом prev_max до с последнего input, тоесть:
При отработке функции с id="test2" - выбирается id="test1",
При отработке функции с id="test3" - выбирается id="test2",id="test1",
а мне нужен только 1 предыдущий id="test2".

Alex_dark74 20.02.2016 20:35

Заметил такую штуку!
если сделать так:
<input class="prev_max" id="test1" onblur="select_prev_tr_tale(this.id)" />
<input class="prev_max" id="test2" onblur="select_prev_tr_tale(this.id)" />
<input class="prev_max" id="test3" onblur="select_prev_tr_tale(this.id)" />

function select_prev_tr_tale(id){ //Редактирует предыдущий input MAX
  test = $('#'+id).prev('.prev_max');
  console.log(test);
}

то все работает
а если поместить в таблицу
<table>
  <tr>
    <td><input class="prev_max" id="test1"  onblur="select_prev_tr_tale(this.id)" /></td>
    <td><input class="prev_max" id="test2"  onblur="select_prev_tr_tale(this.id)" /></td>
    <td><input class="prev_max" id="test3"  onblur="select_prev_tr_tale(this.id)" /></td>
  </tr>
</table>

то нет.

Deff 21.02.2016 01:11

Цитата:

Сообщение от Alex_dark74
а если поместить в таблицу

Гениальное открытие, ибо теперь не input cледуют друг за другом, а td

Alex_dark74 22.02.2016 09:42

Цитата:

Сообщение от Deff (Сообщение 408622)
Гениальное открытие, ибо теперь не input cледуют друг за другом, а td

Это понятно. Но я то пытаюсь выбрать с использованием определенного класса. а в td класса нет.


Часовой пояс GMT +3, время: 14:16.