Измените свой PHP-скрипт, чтобы генерировать HTML, подобный следующему:
<table>
<tbody>
<tr data-id="1">
<td data-col="car">panamera</td>
<td data-col="make">porsche</td>
<td data-col="sales">100</td>
</tr>
</tbody>
</tbody>
id
строки базы данных, соответствующей каждой строке таблицы HTML, указывается с data-id
в каждом tr
.И каждый td
указывает, какому столбцу БД он соответствует, используя data-col
.
. Используя эту информацию, вы можете передать достаточно информации обратно в скрипт PHP, который обновляет базу данных.Таким образом, по существу, когда щелкают ячейку, вы можете получить имя ее столбца, используя:
$(this).data('col')
И вы можете получить идентификатор для ее строки, используя:
$(this).parent('tr').data('id')
Затем вы можете передать этина страницу PHP, которая обновляет БД.
РЕДАКТИРОВАТЬ 1:
Вы можете использовать ul/li
вместо table/tr/td
.Вы также можете использовать class=car, class=make, etc.
вместо data-col='car', data-col='make', etc.
, если используете старую версию jQuery, которая не поддерживает атрибуты data-
в стиле HTML5.
РЕДАКТИРОВАТЬ 2: Полное решение
Измените ваш цикл while
следующим образом:
while ($row = mysql_fetch_assoc($result)) {
echo '<li class="editable" data-id="'.$row['id'].'" data-col="car">'.$row['car'].'</li>';
echo '<li class="editable" data-id="'.$row['id'].'" data-col="make">'.$row['make'].'</li>';
}
Как вы можете видеть, мы храним идентификатор строки базы данных в data-id
и имя столбца базы данных в data-col
.
Теперь сдля этой настройки вам понадобится только один обработчик:
function replaceHTML()
{
var rowId = $(this).data('id');
var colName = $(this).data('col');
var buff = $(this).html().replace(/"/g, """); // Are you sure you need this?
$(this).addClass("noPad")
.html("<form><input type=\"text\" name=\"" + colName + "\" value=\"" + buff + "\" /> <input type=\"text\" name=\"buffer\" value=\"" + buff + "\" /><input type=\"text\" name=\"id\" value=\"" + rowId + "\" /></form><a href=\"#\" class=\"btnSave\">Save changes</a> <a href=\"#\" class=\"btnDiscard\">Discard changes</a>")
.unbind('dblclick', replaceHTML);
}
$(".editable").bind("dblclick", replaceHTML);
Наконец , всегда старайтесь писать читаемый код!Пожалуйста!:)
РЕДАКТИРОВАТЬ 3: JSFiddle
Пожалуйста, смотрите это живое решение .Он показывает, как вы можете получить имя столбца и идентификатор строки.Вам просто нужно адаптировать его для работы с вашим PHP-скриптом.