выбор соседнего элемента в одной строке таблицы
Всем привет.
Не могу реализовать следующее: есть таблица вида: название | id | сортировка заполняется динамически на php из БД сортировка - это поле input text Задача: При потере фокуса поля сортировка взять новое значение этого поля, а также выбрать значение поля id на этой строке таблицы. Т.е. я ajax'сом хочу отправить новое значение поля сортировки и id категории, а дальше изменить его в БД. моя форма: <form action="#" method="get"> <table> начало цикла foreach <tr> <td><a href="#"><?=$row['cat_name']?></a></td> <td><input class="cat_id" value="<?=$row['id']?>"/></td> <td><input class="sort" name="sort" type="text" name="order_cat" size="1" value="<?=$row['order_cat']?>"/></td> </tr> конец цикла foreach </table> </form> на jquery: $("form").each(function(){ $(".sort").change(function(){ var order_cat = $(this).val(); var cat_id = $('.cat_id').val(); }); }); циклом проверяю какое поле изменилось и записываю его значение в переменную. естественно, код выше не работает, а записывает в переменную cat_id id - шник с первой строки таблицы. А как записать во вторую переменную значение поля с классом cat_id, который находиться на одной строке таблицы, тобишь, соответствующий? И вообще правилен ли подход? сразу оговорюсь только начал изучать jquery. |
Как вариант...
<!DOCTYPE html> <html> <head> <script src='http://code.jquery.com/jquery-latest.js'></script> <!-- <link rel='stylesheet type=text/css href=tmp.css' /> --> <style type='text/css'> </style> <script type='text/javascript'> $(function (){ $('form .sort').change(function (){ var id=$(this).parent().prev().find('.cat_id').val(); alert(id); }); }); </script> </head> <body> <form action="#" method="get"> <table> <tr> <td><a href="#">cat_name</a></td> <td><input class="cat_id" value="id"/></td> <td><input class="sort" name="sort" type="text" name="order_cat" size="1" value=""/></td> </tr> </table> </form> </body> </html> |
Цитата:
![]() На самом деле, полю id input не нужен, он будет просто как текст. Допустим, мне надо поменять сортировку у категории, изменил, а она ajax'сом полетела в БД. Изменил "Родителя" а она опять ajax'сом в БД. Все быстро и удобно. А для этого мне нужно отправить на сервер 2 параметра: 1. id - категории 2. новое значения изменяемого поля. Вообще я потом все характеристики категории хочу так редактировать, для каждого столбца(поля) написав соотв функцию. Первое что в голову пришло, видите на картинке. По поводу 2-х name, это я уже намудрил после многочисленных экспериментов. Вообще, вот полный код таблицы: <table class="adm_table_cat"> <tr> <td class="" width="200">Название</td> <td width="30px">id</td> <td width="75px">Родитель</td> <td width="75px">Уровень</td> <td width="85px">Сортировка</td> <td width="65px">Статус</td> <td width="170px">Иконка</td> </tr> <form action="#" method="get"> <?php foreach(массив категорий):?> <tr> <td><a href="#">cat_name</a></td> <td><p class="cat_id">id</p></td> <td><input type="text" name="parent" size="1" value="parent"/></td> <td><select name="level_cat"> <option <?php if($row['level_cat']== '1') echo 'selected="selected"';?>>1</option> <option <?php if(level_cat== '2') echo 'selected="selected"';?>>2</option> <option <?php if('level_cat== '3') echo 'selected="selected"';?>>3</option> <option <?php if(level_cat== '4') echo 'selected="selected"';?>>4</option> </select></td> <td><input class="sort" name="sort" type="text" size="1" value="order_cat"/></td> <td><input type="checkbox" name="activ" <?php if(active == '1') echo 'checked="checked"';?>/></td> <td><input type="text" name="icon_url" size="22" value="icon_url"/></td> </tr> <?php endforeach;?> </form> </table> Я опустил многие php элементы. и id поместил в тэг p, скорее так. Соответственно, id у категории естественно будет меняться, как и все остальные значения. ksa,спасибо, но предложенный вариант, скорее подходит для однострочной таблицы, в моем же случае, как видите нужен цикл. Но я его попробовал, у меня с многострочной таблицей не работает. $("form").each(function(){ $(".sort").change(function(){ var order_cat = $(this).val(); var cat_id = $('.cat_id').val(); }); }); так у меня получается взять новое значение в переменную order_cat, но cat_id всегда содержит id первой строки (категории). оно и понятно, я не прохожусь по нему циклом. Как вариант думал сделать так: классу абзаца id прибавить в цикле на php префикс, например: cat_id_1, соответственно следующие cat_id_2, cat_id_3 и т.д. классу sort тоже самое: sort_1, sort_2, sort_3 и т.д. После чего проходиться циклом each по классу .sort_префикс (но не знаю как) Извлечь этот префикс и в переменную cat_id положить значение поля с классом cat_id_(приклеенный префикс). Правилен ли такой подход? если да. то подскажите как это сделать. Или это можно осуществить только с помощью селекторов? |
Цитата:
<!DOCTYPE html> <html> <head> <script src='http://code.jquery.com/jquery-latest.js'></script> <!-- <link rel='stylesheet type=text/css href=tmp.css' /> --> <style type='text/css'> </style> <script type='text/javascript'> $(function (){ $('form .sort').change(function (){ var id=$(this).parent().prev().find('.cat_id').val(); alert(id); }); }); </script> </head> <body> <form action="#" method="get"> <table> <tr> <td><a href="#">cat_name</a></td> <td><input class="cat_id" value="id1"/></td> <td><input class="sort" name="sort" type="text" name="order_cat" size="1" value=""/></td> </tr> <tr> <td><a href="#">cat_name</a></td> <td><input class="cat_id" value="id2"/></td> <td><input class="sort" name="sort" type="text" name="order_cat" size="1" value=""/></td> </tr> <tr> <td><a href="#">cat_name</a></td> <td><input class="cat_id" value="id3"/></td> <td><input class="sort" name="sort" type="text" name="order_cat" size="1" value=""/></td> </tr> </table> </form> </body> </html> Но что использовать тебе, кроме тебя никто не решит... |
Цитата:
Т.к. функция prev() находит элементы находящиеся непосредственно перед, а у меня есть еще столбцы, то я заменил ее на prevAll() и все заработало! Спасибо огромное! |
Часовой пояс GMT +3, время: 04:20. |