牛骨文教育服务平台(让学习变的简单)
博文笔记

即点即改

创建时间:2016-01-14 投稿人: 浏览次数:1521

首先简单的说下即点即改,按我个人理解就是点击文本内容,然后获取内容复制文本框,进行修改。

写一个简单的demo来看下,请在根目录创建index.html <注意:1、提前下载jquery    2、yourDomainName是指你本地配的虚拟主机,如果没配可以访问localhost或者127.0.0.1>

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>jquery</title>
    <p><span onclick="fun()" >1234235</span></p>
</head>
<body>
<script src="jq.js"></script>
<script type="text/javascript">
    function fun() {
        var obj = $("p");
        var con = obj.text();
        obj.html("<input type="text" onblur="fun1()" />");
        $("input").focus().val(con);
    }
    function fun1() {
        var obj = $("input");
        $("p").html("<span onclick="fun()" >" + obj.val() + "</span>");
    }
</script>
</body>
</html>
访问http://yourDomainName/index.html,大家先简单看下效果。


接下来,咱们一起分析下该如何实现。

首先,我们需要有一个列表,然后为文本内容添加点击事件,触发点击事件后获取文本内容,原位置创建文本框本为文本框赋值,获取焦点。修改文本内容,失去焦点,触发失去焦点事件,获取修改后值,ajax请求修改对应数据,修改成功返回并替换模板文本框,以下为各位贴上代码<删除以上index.html中内容并贴入以下代码>:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>即点即改</title>
</head>
<style type="text/css">
    td{
        width: 200px;
    }
</style>
<body>
<table border="1">
    <tr height="50px">
        <th>ID</th>
        <th>name</th>
        <th>vales</th>
    </tr>
    <tr height="50px">
        <td>1</td>
        <td><span class="click">张三</span></td>
        <td>人</td>
    </tr>
    <tr height="50px">
        <td>2</td>
        <td><span class="click">李四</span></td>
        <td>生</td>
    </tr>
    <tr height="50px">
        <td>3</td>
        <td><span class="click">王五</span></td>
        <td>生</td>
    </tr>
</table>
<script src="jq.js"></script>
<script type="text/javascript">
    $(document).on("click", ".click", function () {
        // 获取操作当前数据的唯一ID.
        var obj = $(this);
        var id = obj.parent().prev().html();
        // 获取当前操作文本内容
        var con = obj.html();
        // 将当前文本内容替换为文本框
        obj.parent().html("<input type="text"/>");
        var obj1= $("input");
        // 为文本框赋值并获取焦点
        obj1.val("").focus().val(con);
        // 文本框失去焦点事件
        obj1.blur(function () {
            // 获取修改后的文本框的值
            var a = obj1.val();
            // 此处添加ajax事件修改对应数据源中数据(此处ajax请求根据ID修改name的值) 修改数据成功后执行以下操作 赋值
            $.ajax({
                url:"c.php",
                type:"get",
                data:{"id" : id, "name" : a},
                dataType:"json",
                success:function (o) {
                    if ( o == 1 ) {
                        obj1.parent().html("<span class="click">" + a + "</span>");
                    } else {
                        obj1.parent().html("<span class="click">" + con + "</span>");
                    }
                }
            });

        });
    });
</script>
</body>
</html>

创建c.php copy以下内容

$id = (int)$_GET["id"];
    $name = $_GET["name"];
    // 连接数据库 根据ID 修改name的值 如果修改成返回1 失败返回2 此处忽略修改语句 直接返回成功 请根据具体业务进行修改
    echo 1;


访问http://yourDomainName/index.html 就实现name这列的修改了。

继续,模仿以上代码,我们稍作修改,实现多列即点即改实现代码。

单列修改就是当前name的值,如果多列的话,只要我们能够获取到当前修改那一列,也就是修改哪一个字段的值,呢么我们也就能完成了,所以 我们做如下改动:

修改index.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>即点即改</title>
</head>
<style type="text/css">
    td{
        width: 200px;
    }
</style>
<body>
<table border="1">
    <tr height="50px">
        <th>ID</th>
        <th>name</th>
        <th>vales</th>
    </tr>
    <tr height="50px">
        <td>1</td>
        <td><span class="click" data-filter="name" data-id="1" >张三</span></td>
        <td><span class="click" data-filter="values" data-id="1" >窝气减法飞</span></td>
    </tr>
    <tr height="50px">
        <td>2</td>
        <td><span class="click" data-filter="name" data-id="2" >李四</span></td>
        <td><span class="click" data-filter="values" data-id="2" >的卡号发过来为空</span></td>
    </tr>
    <tr height="50px">
        <td>3</td>
        <td><span class="click" data-filter="name" data-id="3" >王五</span></td>
        <td><span class="click" data-filter="values" data-id="3" >萨洛克的奖品为</span></td>
    </tr>
</table>
<script src="jq.js"></script>
<script type="text/javascript">
    $(document).on("click", ".click", function () {
        // 获取操作当前数据的唯一ID.
        var obj = $(this);
        var id = obj.data("id");
        var filter = obj.data("filter");
        // 获取当前操作文本内容
        var con = obj.html();
        // 将当前文本内容替换为文本框
        obj.parent().html("<input type="text"/>");
        var obj1= $("input");
        // 为文本框赋值并获取焦点
        obj1.val("").focus().val(con);
        // 文本框失去焦点事件
        obj1.blur(function () {
            // 获取修改后的文本框的值
            var a = obj1.val();
            // 此处添加ajax事件修改对应数据源中数据(此处ajax请求根据ID修改name的值) 修改数据成功后执行以下操作 赋值
            $.ajax({
                url:"c.php",
                type:"get",
                data:{"id" : id, "name" : a, "filter" : filter},
                dataType:"json",
                success:function (o) {
                    if ( o == 1 ) {
                        obj1.parent().html("<span class="click">" + a + "</span>");
                    } else {
                        obj1.parent().html("<span class="click">" + con + "</span>");
                    }
                }
            });
        });
    });
</script>
</body>
</html>

修改c.php

$id     = (int)$_GET["id"];
$name   = $_GET["name"];
$filter = $_GET["filter"];
// 连接数据库 根据ID filter 修改name的值 如果修改成返回1 失败返回2
echo 1;

访问http://yourDomainName/index.html 查看效果。


自此,即点即改功能就实现了,这只是其中一种方案,仅供参考,勿喷!!!大笑


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。