0
id  car         make          sales
 1  panamera    porsche       100 
 2  italia      ferrari       200
 3  volante     astonmartin   300
 4  avantador   lamborghini   400
 5  slk         mercedes      500

所以伙计们,我的数据库中有这个简单的表。我将在一段时间循环中回显这张表。

<ul>
<?php  
$query = "SELECT * FROM inplace LIMIT 0, 6";    
$result = mysql_query($query) or die ('Query couldn\'t be executed');  
while ($row = mysql_fetch_assoc($result)) {
echo '<li class="editable" id="'.$row['id'].'">'.$row['car'].'</li>';
echo '<li class="editable2" id="'.$row['id'].'">'.$row['make'].'</li>'; 
}
?>
</ul>

想法是使用 jQuery 就地编辑器更新此表。所以这里是代码 -

$(document).ready(function() 
{
$(".editable").bind("dblclick", replaceHTML);
$(".editable2").bind("dblclick", replaceHTML2);
$(".btnSave, .btnDiscard").live("click", handler);

function handler()
    {

        if ($(this).hasClass("btnSave"))
            {

                var str = $(this).siblings("form").serialize();
                $.ajax({
                        type: "POST",
                        async: false,
                        url: "handler.php",
                        data: str,
                }); 

            }

    } 

function replaceHTML()
    {
        var buff = $(this).html()
        .replace(/"/g, "&quot;");
        $(this).addClass("noPad")
                .html("<form><input type=\"text\" name=\"car\" value=\"" + buff + "\" /> <input type=\"text\" name=\"buffer\" value=\"" + buff + "\" /><input type=\"text\" name=\"id\" value=\"" + $(this).attr("id") + "\" /></form><a href=\"#\" class=\"btnSave\">Save changes</a> <a href=\"#\" class=\"btnDiscard\">Discard changes</a>")
                .unbind('dblclick', replaceHTML);   


    }

    function replaceHTML2()
    {
        var buff = $(this).html()
        .replace(/"/g, "&quot;");
        $(this).addClass("noPad")
                .html("<form><input type=\"text\" name=\"make\" value=\"" + buff + "\" /> <input type=\"text\" name=\"buffer\" value=\"" + buff + "\" /><input type=\"text\" name=\"id\" value=\"" + $(this).attr("id") + "\" /></form><a href=\"#\" class=\"btnSave\">Save changes</a> <a href=\"#\" class=\"btnDiscard\">Discard changes</a>")
                .unbind('dblclick', replaceHTML);   


    }

}
); 

这是我从互联网上获得的就地编辑代码,我只是为了理解代码而将其撕成基本级别。不要担心更新查询,它在“handler.php”中。这里的问题是,我必须为每一列编写单独的函数。在这种情况下,我必须编写一个单独的函数来更新“car”列,单独的函数来更新“make”列并继续。我不认为这是正确的方法。因为,这里我只有 3 列。如果我有 10 到 15 列怎么办?我不认为写 15 个函数是正确的方法。而“$(this).html()”只取一个表单的值。请帮忙。

4

1 回答 1

1

修改您的 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 表行对应的数据库行的 用eachdata-id指定tr。并且每个td指定它对应于哪个 DB 列使用data-col.

使用这些信息,您可以将足够的信息传递回更新数据库的 PHP 脚本。因此,基本上当单击单元格时,您可以使用以下方法获取其列名:

$(this).data('col')

您可以使用以下方法获取其行的 ID:

$(this).parent('tr').data('id')

然后您可以将这些传递给更新数据库的 PHP 页面。

编辑1:

您可以使用ul/li而不是table/tr/td. 如果您使用的是不支持 HTML5 样式属性的旧版本的 jQuery,您也可以使用class=car, class=make, etc.而不是。data-col='car', data-col='make', etc.data-

编辑 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>'; 
}

如您所见,我们将数据库行 IDdata-id和数据库列名存储在data-col.

现在有了这个设置,你只需要一个处理程序:

function replaceHTML()
{
    var rowId   = $(this).data('id');
    var colName = $(this).data('col');
    var buff = $(this).html().replace(/"/g, "&quot;"); // 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

请查看此实时解决方案。它显示了如何获取列名和行 ID。您只需要采用它来处理您的 PHP 脚本。

于 2012-02-27T06:27:53.753 回答