Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.03.2013, 22:05
Новичок на форуме
Отправить личное сообщение для Sckatik Посмотреть профиль Найти все сообщения от Sckatik
 
Регистрация: 23.03.2013
Сообщений: 4

Редактирование ячеек таблицы
Всем добрый вечер =) Ребят подскажите пожалуйста, что делаю не так.
Ситуация в целом:
есть бд, в которой находится таблица
на страницу выводится так же табличка, в которую пользователь должен ввести данные, а они соответственно передаться в бд
табличку вывожу таким вот образом:
<table class="bordered" id="js_table" border="1">
<th>&nbsp;</th>
 
<?
$sql=mysql_query("select * from $table");
$num = mysql_num_fields($sql);
for ($i = 1; $i <$num; $i++) 
{
echo "<th>".mysql_field_name($sql, $i)."</th>";
}
//выводим столько строк, сколько найдем в таблице из бд
while($row=mysql_fetch_array($sql))
{
?>
 
<tr  id="<?echo $row['id']; ?>" class="edit_tr">
<td><? echo $row['id']; ?></td>
<?
 
//выводим столбцы
for ($i=1; $i <$num; $i++) {
 
$result = mysql_query("select Name from Table1 where id = '$i'");  //получаем ФИО
$shef = mysql_fetch_array($result);                                        //обрабатываем полученные данные
$temp = $shef['Name'];                                              
?>
 
<td  >
<input type="text" value="<?php echo $row[$temp]; ?>" class="editbox_input" id="first_input_<?php echo $i ?>"/>
</td>
 
<td style="display:none;" >
<input class="table_ajax" type="text" value="<?php echo $table; ?>" class="editbox_input" id="table_input_<?php echo $i ?>"/>
</td>
 
<td style="display:none;" >
<input class="table_ajax" type="text" value="<?php echo $temp; ?>" class="editbox_input" id="namestolb_input_<?php echo $i ?>"/>
</td>
<?//конец for
}
//и так делаем для каждой строчки которую выводим (цикл while)
?>
</tr>
 
<?//конец while
}?>
 
</table>

В табличке использую в т.ч. 2 скрытых дива, т.к. в итоге они мне нужны для sql запроса, который обновит соответствующую ячейку в таблице из бд

результаты уходят в temp.js, где обрабатываются и с помощью ajax передаются в файл, с sql запросом на обновление таблицы

temp.js

$(document).ready(function()
{
$(".edit_tr").click(function()
{
var ID=$(this).attr('id');
$("#first_input_"+ID).show();
$("#table_input_"+ID).show();
$("#namestolb_input_"+ID).show();
 
}).change(function()
{
var ID=$(this).attr('id');                               
var first=$("#first_input_"+ID).val();                                            
var table=$("#table_input_"+ID).val();
//textId = encodeURI(document.getElementById('id').value);
//var namestolb=textId;                   
var namestolb=$("#namestolb_input_"+ID).val();          
dataString = 'id='+ ID +'&firstname='+first+'&table='+table+'&namestolb='+namestolb ;
 
 
$.ajax({
type: "POST",
url: "todb.php",
data: dataString,
cache: false,
success: function(html)
{
$("#first_"+ID).html(first);
$("#table_"+ID).html(table);
$("#namestolb_"+ID).html(namestolb);
 
}
});
 
});
});


В итоге введя данные в ячейку таблицы я получаю корректно id, имя таблицы, а вот с самим значением и номером столбца беда..
я не могу в post получить корректные данные о столбце, в котором редактировалась ячейка и сами данные, которые были введены.
Если делать так
<input class="table_ajax" type="text" value="<?php echo $temp; ?>" class="editbox_input" id="namestolb_input_<?php echo $i ?>"/>


То введя данные например в 3 строку 4 столбец - получаю имя столбца 3 (т.е. по ид строки)
Значение '&firstname=' (т.е. сами введенные данные) остается вобще пустым.
Передается оно только, если введено в 1-м столбце

Если сделать так



<input class="table_ajax" type="text" value="<?php echo $temp; ?>" class="editbox_input" id="namestolb_input_<?php echo $row['id'] ?>"/>


то значение '&namestolb=' всегда = ид 1 столбца, куда бы не вводились данные, а
'&firstname=' фигурирует опять же, только если введено в первом столбце

Пробовал экспериментировать с атрибутом .attr() - пытаясь получить напрямую нужное значение, но неизменно получаю unendefined в запрос
Пробовал подставлять этозначение в ид (наименование самого столбца) но получаю тот же ответ - такого атрибута нету у указанного элемента

Кажется перепробовал все уже, но конечно же это не так, не буду жаловаться на неопытность, по коду это и так видно. Буду рад любой подсказке или помощи. Заранее спасибо =)

Последний раз редактировалось Sckatik, 23.03.2013 в 22:07.
Ответить с цитированием
  #2 (permalink)  
Старый 23.03.2013, 22:34
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Нихрена себе сочинение. А можно в трех предложениях описать проблему?
Ответить с цитированием
  #3 (permalink)  
Старый 23.03.2013, 22:52
Новичок на форуме
Отправить личное сообщение для Sckatik Посмотреть профиль Найти все сообщения от Sckatik
 
Регистрация: 23.03.2013
Сообщений: 4

проблема в том, что не передается нужный параметр в переменную
var namestolb и var first
в переменную namestolb нужно запихать значение текущего столбца, к которому относится ячейка, а в переменную first - то значение, которое должно остаться в ячейке

к примеру я хочу отредактировать ячейку, которая находится в 7 строке, 3 столбце (к примеру он называется Отчество) и вношу значение "Иванович"
надо, что бы в переменную namestolb было передано "Отчество", а в first - "Иванович"
Ответить с цитированием
  #4 (permalink)  
Старый 24.03.2013, 07:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А какой толк от того что попадет в эти самые переменные? Ну попадет, а дальше что?
Навешиваешь обработчик onchange на поля ввода. Событие change возникает после завершения редактирования поля (при потере фокуса). В обработчике получаешь значение поля и используешь как тебе надо.
Ответить с цитированием
  #5 (permalink)  
Старый 24.03.2013, 07:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Судя по коду ты примерно так и делаешь. Уверен что id-шники не дублируются? Вобще такой подход - генерация 100500 идшников - не очень хорошая идея. Приведи код таблицы (пару строк), сгенерированный твоим серверным скриптом.
\
Ответить с цитированием
  #6 (permalink)  
Старый 24.03.2013, 18:40
Новичок на форуме
Отправить личное сообщение для Sckatik Посмотреть профиль Найти все сообщения от Sckatik
 
Регистрация: 23.03.2013
Сообщений: 4

Действительно id инпутов дублировались. присвоил им уникальные имена, но к сожалению не могу получить доступ к нужному элементу.
вот эта штукенция мне возвращает номер текущей строки в таблице
var ID=$(this).attr('id');

получается
var namestolb=$("#namestolb_input_"+ID).val();

всегда возвращает положение ячейки, но не реальное, а с номером строки в которой находимся.
к примеру - стою я в ячейке с номером 24 в строке 2, 4 столбце -
мне возвращается положение #namestolb_input_"+4, вместо #namestolb_input_"+24
в скрытый инпут вывел значение уникальное для ячейки в name таким образом
<td style="display:none;" >
<input class="table_ajax" type="text" value="<?php echo $temp; ?>" class="editbox_input" id="namestolb_input_<?php echo $j ?>" name = "<?php echo $j ?>"/>
</td>
(j - уникальный индекс каждой ячейки)
но не могу никак получить доступ к нему =(

вот пример срок уже генерированной таблицы

<tr id="24" class="edit_tr">
<td>24</td>
<td>
<input id="first_input_461" class="editbox_input" type="text" value="">
</td>
<td style="display:none;">
<input id="table_input_461" class="table_ajax" type="text" value="04_13">
</td>
<td style="display:none;">
<input id="namestolb_input_461" class="table_ajax" type="text" name="461" value="Иван Иванович">
</td>

04_13 - имя таблицы в бд
Иван Иванович - имя столбца

при передаче данных вот такое у меня происходит
firstname
id 6 (номер строки)
namestolb undefined
table 04_13
Ответить с цитированием
  #7 (permalink)  
Старый 24.03.2013, 19:11
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<tr id="24" class="edit_tr">
<td>24</td>
<td>
<input name="firstfield" class="editbox_input" type="text" value="">
</td>
<td style="display:none;">
<input name="secondfield" class="table_ajax" type="text" value="04_13">
</td>
<td style="display:none;">
<input name="thirdfield" class="table_ajax" type="text" value="Иван Иванович">
</td>
<script>
$(.edit_tr).change(function(e){
    var $firstfield = $(this).find('input[name="firstfield"]'); 
    var $secondfield = $(this).find('input[name="secondfield"]'); 
    var $thirdfield = $(this).find('input[name="thirdfield"]');
    e.target; // поле, породившее событие change
});
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 24.03.2013, 19:47
Новичок на форуме
Отправить личное сообщение для Sckatik Посмотреть профиль Найти все сообщения от Sckatik
 
Регистрация: 23.03.2013
Сообщений: 4

danik.js спасибо Вам огромное, Вы чуть ли не единственный, кто хоть как то пытался мне помочь =)
проблема оказалась как всегда в обычной невнимательности =(
а теперь по существу:
вот здесь шло обращение не к ячейке, а к всей строке в целом
$(".edit_tr").click(function()

поэтому никак не удавалось получить значения атрибутов самой ячейки, а получал значение атрибутов строки в целом
в скрипте поменял таким образом
$(".edit_td").click(function()
{
}).change(function()
{
var ID=$(this).attr('name');                           
var first=$("#first_input_"+ID).val();                                            
var table=$("#table_input_"+ID).val();                
var namestolb=$("#namestolb_input_"+ID).val();
var str = $("#str_"+ID).val();          
dataString = 'id='+ str +'&firstname='+first+'&table='+table+'&namestolb='+namestolb ;

встал вопрос, в том, что необходимо в sql запрос передать и номер строки, которую будем обновлять
Для этого ввел еще один скрытый инпут вот так:
<td style="display:none;" >
<input type="text" value="<?php echo $id; ?>" id="str_<?php echo $j ?>" class="edit_td" name = "<?php echo $j ?>"/>
</td>

уже протестил, все работает отлично =)
Еще раз Вам большое спасибо danik.js =)
Ответить с цитированием
  #9 (permalink)  
Старый 24.03.2013, 21:23
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Не обязательно создавать целый инпут ради этого. Достаточно приписать атрибут data-* для строки:
<tr data-row="xxx" id="yyy"
А в скрипте получить так
var row = $(this).data('row');


Сообщение от Sckatik
var ID=$(this).attr('name');  
У td нет атрибута name. Это ошибка?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсветка родительских ячеек таблицы Demath Элементы интерфейса 10 11.02.2013 14:33
IE 8: баг при динамическом display=none; у ячеек таблицы SegaMega Элементы интерфейса 0 21.09.2012 06:47
Не выводится содержимое ячеек таблицы SER Events/DOM/Window 2 23.06.2011 17:48
Реализация функции JavaScript, меняющей содержимое ячеек таблицы по событию onchange BOJIKOJIAK Events/DOM/Window 1 24.05.2010 05:50
Добраться до ячеек таблицы через DOM twolf Events/DOM/Window 11 21.01.2009 17:29