Jquery與Bootstrap實現後臺管理頁面增刪改查功能

使用jquery與bootstrap實現了一個比較簡單但功能齊全的增刪改查功能的後臺管理頁面,雖然只是一個CRUD頁面,但麻雀雖小五臟俱全,JS經常使用的功能都用到了,本例用原生的jquery與bootstrap配合使用,不考慮JS的重構性及打包,該例子零耦合,開箱即用。javascript

先看Demo:php

clipboard.png

1、用到的Jquery功能

一、獲取/賦值input輸入值css

$("#my_id").val();// 獲取
$("#my_id").val(「user_id");// 賦值

二、獲取/賦值textarea文本域輸入值html

$("#my_textarea").val();// 獲取
$("#my_textarea").val("my_textarea");// 賦值

// 文本域顯示默認值,這個和input不同,不能經過value賦默認值
<textarea  name="my_textarea" readonly="true"style="width:100px;height:30px;">這裏是文本域默認的內容</textarea>

三、隱藏/顯示輸入框前端

$("#my_input").hide();
$("#my_input").show();

四、獲取表單form輸入的數據java

$("#my_input").hide();
$("#my_input").show();

五、js相關方法jquery

< a href="javascript:history.back()">回退</a>
 <a class="btn btn-sm btn-primary grid-refresh" href="javascript:location.reload()"><i class="fa fa-refresh"></i> 刷新</a>
 <input data-id="edit_btn_{id}" role="update" class="button1" type="button" value="編輯" onClick="document.location.href = 'announcement_edit.php?annc_id={annc_id}'" />
 <input data-id="delete_btn_{id}" role="delete" class="button2" type="button" value="刪除" onClick="javascript:if(confirm('您肯定刪除該通告嗎?')) ajax_handle('announcement','del',{annc_id:'{annc_id}'},'table1_div');" />

六、異步請求實例ajax

// 1.簡單的異步請求 $.post
  $.post('./express_statement.php',{act:"import_data", year:year,month:month}, function (data){
      $("#tip").html("<span style='color:red'>恭喜您,處理完成!</span>");
      console.log(data);
   }, 'json');
             
// 2. 複雜一點的請求 $.ajax (該請求能夠設置更多的參數,如超時時間)
$.ajax({
  url:url,
  type:"POST",
  data:{name:name},
  timeout:30000,
  dataType:"json",
  success:function(data){
    //var msgJson = eval(data); dataType爲json,就不用轉了
    if (msgJson.status == "0") {
        $("#infoRefund").attr("style", 'display:block')
    } else {
        alert("查詢錯誤,請稍後再試")
    }
  },
  error:function(){}
});

從以上咱們能夠看出,$.post$.ajax的一個簡化。簡化,因此就會省去不少參數。要用更多功能,就用$.ajaxexpress

若是ajax返回的爲json 字符串,則要轉爲json對象:json

var obj = eval('('+data+')');
 if(obj.code > 0){

 }

七、dom自動加載
jquery中的$(function(){...})何時執行?

這個是在頁面DOM文檔加載完成後加載執行的,等效於$(document).ready(function(){...});
優於window.onload,後者必須等到頁面內包括圖片的全部元素加載完畢後才能執行。

若是你不想讓它自動執行能夠把這些放到一個函數中,想執行時調用就能夠了

八、$.fn用法
在 jQuery 中,fn 其實就是 JavaScript 中 propotype 的一個別名,$ 是 jQuery 的別名,因此

$.fn.pluginName 等同於 jQuery.prototype.pluginName
$.fn.pluginName 表示建立一個 jQuery 的屬性,通俗的說是寫一個 jQuery 函數

pluginName 纔是函數名
實例:

$.fn.setRedText = function() {
    return $(this).css("color", "red");
};
 
$("p").setRedText();

九、$.extend用法
Jquery的擴展方法extend是咱們在寫插件的過程當中經常使用的方法,該方法有一些重載原型,在此,咱們一塊兒去了解了解。

Jquery的擴展方法原型是:   

extend(dest,src1,src2,src3...);

它的含義是將src1,src2,src3...合併到dest中,返回值爲合併後的dest,由此能夠看出該方法合併後,是修改了dest的結構的。若是想要獲得合併的結果卻又不想修改dest的結構,能夠以下使用:

var newSrc=$.extend({},src1,src2,src3...) //也就是將"{}"做爲dest參數。

這樣就能夠將src1,src2,src3...進行合併,而後將合併結果返回給newSrc了。以下例:

var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"})

那麼合併後的結果

result={name:"Jerry",age:21,sex:"Boy"}

也就是說後面的參數若是和前面的參數存在相同的名稱,那麼後面的會覆蓋前面的參數值。

2、示例代碼

示例前端active_list.html代碼:

<!DOCTYPE html>
<html>
<head>
    <meta charset="gb2312">
    <title>活動列表</title>
    <link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<script>
    function show_upload_info(img_url,title,n)
    {
        //document.getElementById("img_view"+n).src = img_url;
        //document.getElementById("img_view"+n).style.display = '';
        //document.getElementById("img_url"+n).value = img_url;
        $("#img_url"+n).val(img_url);
        $("#img_view"+n).attr('src', img_url);
    }

    function act_resize_img(imgObj, rectWidth, rectHeight, fixIeBug)
    {
        try
        {
            if(!fixIeBug) fixIeBug = true;
            //修正在IE運行下的問題
            if( (imgObj.width==0 || imgObj.height==0) && fixIeBug ) {
                var timer = setInterval(function(){
                    act_resize_img(imgObj, rectWidth, rectHeight, false);
                    clearInterval(timer);
                }, 1000);
                return;
            }
            var x = imgObj.width>rectWidth ? rectWidth : imgObj.width;
            var y = imgObj.height>rectHeight ? rectHeight : imgObj.height;
            var scale    = imgObj.width/imgObj.height;

            if( x>y*scale ) {
                imgObj.width    = Math.floor(y*scale);
                imgObj.height    = y;
            }else {
                imgObj.width    = x;
                imgObj.height    = Math.floor(x/scale);
            }
            imgObj.style.width = imgObj.width+"px";
            imgObj.style.height = imgObj.height+"px";

            if (typeof(imgObj.onload)!='undefined')
            {
                imgObj.onload=null;
            }
        }
        catch(err)
        {

        }
    }

    $(document).ready(function() {
        // 配置日期事件
        $("#expire_time").focus(function () {
            WdatePicker({'dateFmt': 'yyyy-MM-dd HH:mm:ss'});
        });
    });

    // 提交表單
    function delete_info(active_id)
    {
        if(confirm("確認刪除嗎?"))
        {
            if(!active_id)
            {
                alert('Error!');
                return false;
            }

            $.ajax(
                    {
                        url: "action/active_action.php",
                        data:{"active_id":active_id, "act":"del"},
                        type: "post",
                        beforeSend:function()
                        {
                            $("#tip").html("<span style='color:blue'>正在處理...</span>");
                            return true;
                        },
                        success:function(data)
                        {
                          //  var obj = eval('('+data+')');
                            if(data > 0)
                            {
                                alert('操做成功');
                                $("#tip").html("<span style='color:blueviolet'>恭喜,刪除成功!</span>");


                                location.reload();
                            }
                            else
                            {
                                $("#tip").html("<span style='color:red'>失敗,請重試</span>");
                                alert('操做失敗');
                            }
                        },
                        error:function()
                        {
                            alert('請求出錯');
                        },
                        complete:function()
                        {
                            // $('#tips').hide();
                        }
                    });

        }

        // var form_data = new Array();
        return false;
    }

    // 編輯表單
    function get_edit_info(active_id)
    {
        if(!active_id)
        {
            alert('Error!');
            return false;
        }
        // var form_data = new Array();

        $.ajax(
                {
                    url: "action/active_action.php",
                    data:{"active_id":active_id, "act":"get"},
                    type: "post",
                    beforeSend:function()
                    {
                        // $("#tip").html("<span style='color:blue'>正在處理...</span>");
                        return true;
                    },
                    success:function(data)
                    {
                        if(data)
                        {
                            // 解析json數據
                            var data = data;
                            var data_obj = eval("("+data+")");

                            // 賦值
                            $("#order_num").val(data_obj.order_num);
                            $("#active_id").val(data_obj.active_id);
                            $("#img_url1").val(data_obj.cover_img_url);
                            $("#title").val(data_obj.title);
                            var status = data_obj.status;
                            if(status == 1)
                            {
                                $("#status_on").attr("checked",'checked');
                            }else{
                                $("#status_off").attr("checked",'checked');
                            }

                            $("#tag_name").val(data_obj.tag_name);
                            $("#remark").val(data_obj.remark);
                            $("#summary").val(data_obj.summary);
                            // $("#expire_time").val(data_obj.expire_time);
                            $("#act").val("edit");
                            if(data_obj.expire_time == 0)
                            {
                                // 隱藏時間框
                                $("#expire_time").hide();
                                $("#is_forever").attr("checked","checked");
                            }
                            else
                            {
                                $("#expire_time").val(data_obj.expire_time);
                            }

                        }
                        else
                        {
                            $("#tip").html("<span style='color:red'>失敗,請重試</span>");
                          //  alert('操做失敗');
                        }
                    },
                    error:function()
                    {
                        alert('請求出錯');
                    },
                    complete:function()
                    {
                        // $('#tips').hide();
                    }
                });

        return false;
    }

    //點擊 活動是否限時事件
    function click_forever()
    {
        // 不能用attr('checked')獲取是否選中,由於返回‘undedied’
        // var is_check = $('#is_forever').attr('checked');

        // 能夠用prop("checked")或is(':checked')來獲取是否選中
        var is_check = $('#is_forever').prop("checked");
        // alert(is_check);
        if(is_check)
        {
            $("#expire_time").hide();
            $("#expire_time").val(0);
        }
        else
        {
            $("#expire_time").show();
        }

    }

    // 提交表單
    function check_form()
    {
        var title = $.trim($('#title').val());
        var tag_name = $.trim($('#tag_name').val());
        var act     = $.trim($('#act').val());

        if(!title)
        {
            alert('標題不能爲空!');
            return false;
        }
        if(!tag_name)
        {
            alert('標籤不能爲空!');
            return false;
        }
        var form_data = $('#form_data').serialize();

        // 異步提交數據到action/add_action.php頁面
        $.ajax(
                {
                    url: "action/active_action.php",
                    data:{"form_data":form_data,"act":act},
                    type: "post",
                    beforeSend:function()
                    {
                        $("#tip").html("<span style='color:blue'>正在處理...</span>");
                        return true;
                    },
                    success:function(data)
                    {
                        if(data > 0)
                        {

                            var msg = "添加";
                            if(act == "edit") msg = "編輯";
                            $("#tip").html("<span style='color:blueviolet'>恭喜," +msg+ "成功!</span>");
                            // document.location.href='system_notice.php'
                            alert(msg + "OK!");
                            location.reload();
                        }
                        else
                        {
                            if(data == -2) alert("標籤名不能重複!");
                            $("#tip").html("<span style='color:red'>失敗,請重試</span>");
                            alert('操做失敗');
                        }
                    },
                    error:function()
                    {
                        alert('請求出錯');
                    },
                    complete:function()
                    {
                        $('#acting_tips').hide();
                    }
                });

        return false;
    }

    $(function () { $('#addUserModal').on('hide.bs.modal', function () {
        // 關閉時清空edit狀態爲add
        $("#act").val("add");
        location.reload();
    })
    });
</script>
<body>
<div class="container" style="min-width: 1200px;">

<h1>
    活動列表
</h1>
    <form action="active_info_list.php" method="post" class="form">
    <table class="table table-bordered">
        <tbody>
        <tr>
            <td>標題:<input type="text" name="search_title" value="{search_title}"></td>
            <td>   <!-- 按鈕觸發模態框 -->
                <button class="btn btn-primary btn-sm" data-toggle="modal"  data-target="#addUserModal">
                    添加活動
                </button>
            </td>
        </tr>
        <tr>
            <td colspan="10" style=" text-align: center; padding: 10px; border: none">
                <input type="submit" class="btn btn-default" value="搜索" />&nbsp;&nbsp;<a href="active_info_list.php">默認</a>
            </td>
        </tr>
        </tbody>
    </table>
    </form>

    總數(<b>{total_count}</b>)
<table class="table table-hover table-bordered" >
    <thead>
    <tr>
        <th>排序</th>
        <th>顯示標題</th>
        <th>圖片連接</th>
        <th>標籤</th>
        <th>截止時間</th>
        <th>狀態</th>
        <th>活動詳情</th>
        <th>獎項設置</th>
        <th>簡介</th>
        <th>備註</th>
        <th>操做</th>
    </tr>
    </thead>
    <tbody>
    <!-- BEGIN list -->
    <tr>
        <td>{order_num}</td>
        <td>{title}[{active_id}]</td>
        <td><input readonly="true" value="{cover_img_url}" style="width:150px;"/></td>
        <td>{tag_name}</td>
        <td>{expire_time}</td>
        <td><!-- IF status=="1" --> 上架 <!-- ELSE --><font color="gray">下架</font><!-- ENDIF --></td>
        <td><a href="active_content_edit.php?active_id={active_id}" target="_blank">內容編輯</a></td>
        <td><span class="glyphicon glyphicon-cog"></span>&nbsp;<a href="active_prize.php?active_id={active_id}" target="_blank">設置獎項</a></td>
        <td><textarea  readonly="true"style="width:100px;height:30px;"/>{summary}</textarea></td>
        <td>{remark}</td>
        <td>
            <button type="button" class="btn btn-info" data-toggle="modal" onclick="return get_edit_info({active_id})" data-target="#addUserModal">編輯</button>
            &nbsp;&nbsp;
        <button type="button" class="btn btn-danger" onclick="return delete_info({active_id})">刪除</button>
        </td>

    </tr>

    <!-- END list -->


    </tbody>
</table>
    {page_str} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

    <!-- 模態框(Modal) -->

    <div class="modal fade" id="addUserModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
                        &times;
                    </button>
                    <h4 class="modal-title" id="myModalLabel">
                        活動詳情
                    </h4>
                </div>
                <div class="modal-body">
                    <div class="form-group">
                        <label for="lastname" class="col-sm-3 control-label">上傳封面圖片</label>
                        <div class="col-sm-9">
                            <!--注意這裏的iframe標籤-->
                            <iframe src="upload_img.php" frameborder="0" scrolling="no" width="380px" height="35"></iframe>
                        </div>
                    </div>
                    <form method="post" action="" class="form-horizontal" role="form" id="form_data" onsubmit="return check_form()" style="margin: 20px;">
                        <div class="form-group">
                            <label for="lastname" class="col-sm-3 control-label">排名</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" id="order_num" name="order_num" value="{order_num}"
                                       placeholder="排名">
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="lastname" class="col-sm-3 control-label">標題</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" name="title" value="{title}" id="title"
                                       placeholder="">
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="lastname" class="col-sm-3 control-label">標籤</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" name="tag_name" value="{tag_name}" id="tag_name"
                                       placeholder="">
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="lastname" class="col-sm-3 control-label">封面圖連接</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" name="cover_img_url" value="{cover_img_url}" id="img_url1"
                                       placeholder="圖片連接"> <img onload="act_resize_img(this,60,60,true);" id="img_view1" src="" style="margin:3px;"  />
                                <input type="hidden" id="act" value="add" name="act"/>
                                <input type="hidden" id="active_id" value="{active_id}" name="active_id"/>
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="lastname" class="col-sm-3 control-label">截止時間</label>
                            <div class="col-sm-9">
                                <!-- 塊元素變爲內聯元素 用display:inline屬性便可成一行,塊元素用block -->
                                <input type="text" style="width: 300px;display:inline" class="form-control" name="expire_time" value="{expire_time}" class="Wdate" readonly="readonly" id="expire_time"
                                       >
                                <label class="checkbox-inline">
                                <input type="checkbox" name="is_forever" id="is_forever" value="1" onclick="return click_forever()">不限時
                                    </label>

                            </div>
                        </div>

                        <div class="form-group">
                            <label for="lastname" class="col-sm-3 control-label">狀態</label>
                            <div class="col-sm-9">

                                <label class="checkbox-inline">
                                    <input type="radio" name="status" id="status_on" value="1"  >上架
                                </label>
                                <label class="checkbox-inline">
                                    <input type="radio" name="status" id="status_off" checked="checked" value="0" >下架
                                </label>
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="remark" class="col-sm-3 control-label">簡介</label>
                            <div class="col-sm-9">
                                <textarea  class="form-control"  name="summary" value="{summary}" id="summary"
                                       placeholder="活動簡介">

                                </textarea>
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="remark" class="col-sm-3 control-label">備註</label>
                            <div class="col-sm-9">
                                <textarea  class="form-control"  name="remark" value="{remark}" id="remark"
                                           placeholder="備註">

                                </textarea>
                            </div>
                        </div>
                   </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">關閉
                    </button>
                    <button type="submit" class="btn btn-primary">
                        提交
                    </button><span id="tip"> </span>
                </div>
                </form>
            </div><!-- /.modal-content -->
        </div><!-- /.modal -->
    </div>
</div>
</body>
</html>

動做處理頁面active_action.php

<?php

/**
 * 獲取提交的數據
 *
 */

$act       = $_POST['act'];
$id        = $_POST['id'];
$user_id   = (int)$_POST['user_id'];
$form_data = $_POST['form_data'];
$param_arr = array();


// 獲取到的數據格式爲 「foo=bar&baz=boom&cow=milk&php=hypertext+processor」
// http_build_query 的數據形式用parse_str解析爲數組格式
parse_str($form_data, $param_arr);

// 備註中文處理
$param_arr['remark']  = iconv("utf-8", "gbk", trim($param_arr['remark']));


switch($act)
{
    case "add":

        // 添加入庫操做
        // ...
        // ...
        break;

    case "edit":

        // 編輯操做
        $user_id = $param_arr['user_id'];
        
        // ...
        break;

    case "get":

        // 返回詳細的用戶信息
        // get($user_id);
        echo $ret;
        exit();
        break;
    case "del":
        // 刪除
        // delete();
        break;
}

echo $ret > 0 ? 1 : 0;

$.each遍歷方法使用

$("#b4").click(function(){
              //alert($("select option:selected").text());
            //必須 用這個 val()函數把每一個值打印;
//alert($("select option:selected").val());    //會彈出 選項1   ???
            // <option value="選項1">選項1^^</option>由於它取得不是文本框裏的值 選項1^^,而是value的值選項1
        var $objs=$("select option:selected");

        /*    $.each($objs,function(){
                alert($(this).val());
            });*/
        
        /*    $.each($objs,function(i,n){
            //    alert(n.value);
                alert($(n).val());
            })*/
            
        /*    $objs.each(function(){
                window.alert($(this).val());
            })*/
            
            $objs.each(function(i,n){
                window.alert("ok"+$(n).val());
            })
            
            
      })

clipboard.png

8、JS實現雙擊內容變爲可編輯狀態

在一些網站上咱們常常看到交互性很強的功能。一些用戶資料能夠直接雙擊出現文本框,並在此輸入新的資料便可修改,無需再按肯定按鈕等。。
我在網上查了不少資料,但都有一個小bug,就是當獲取焦點後,光標的位置在文本框內容是開始處,這樣編輯時還須要用戶再從新選擇一下光標位置,這樣的交互感受很差;後來查到新的資料解決了此問題,但願能夠幫助到更多的人。

代碼部分:

注意:設置選擇文本的內容或設置光標位置

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JS實現雙擊編輯可修改狀態</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script type="text/javascript">
    function ShowElement(element) {
        var oldhtml = element.innerHTML;
        //建立新的input元素
        var newobj = document.createElement('input');
        //爲新增元素添加類型
        newobj.type = 'text';
        //爲新增元素添加value值
        newobj.value = oldhtml;
        //爲新增元素添加光標離開事件
        newobj.onblur = function() {
            //當觸發時判斷新增元素值是否爲空,爲空則不修改,並返回原有值 
            element.innerHTML = this.value == oldhtml ? oldhtml : this.value;
            //當觸發時設置父節點的雙擊事件爲ShowElement
            element.setAttribute("ondblclick", "ShowElement(this);");
        }
        //設置該標籤的子節點爲空
        element.innerHTML = '';
        //添加該標籤的子節點,input對象
        element.appendChild(newobj);
        //設置選擇文本的內容或設置光標位置(兩個參數:start,end;start爲開始位置,end爲結束位置;若是開始位置和結束位置相同則就是光標位置)
        newobj.setSelectionRange(0, oldhtml.length);
        //設置得到光標
        newobj.focus();

        //設置父節點的雙擊事件爲空
        newobj.parentNode.setAttribute("ondblclick", "");

    }
</script>
</head>
<body>
    <dl>
        <dt>你的用戶名:</dt>
        <dd ondblclick="ShowElement(this)">三人行</dd>
        <dt>你的個性檔</dt>
        <dd ondblclick="ShowElement(this)">三人行,必有我師焉!</dd>
    </dl>
</body>
</html>

雙擊事件:ondblclick
替換div中的內容:

document.getElementById('spxx').innerHTML = res.content;  // document
$("#"+remark_id).html(remark);     // jquery

jQuery中沒有innerText、innerHtml

發現若是我在div或者其餘非表單的標籤中賦值,本來用普通的js就直接document.getElementById("id").innerHtml(或者其餘幾個)就能夠了。
可是在jQuery中不行
例如:

document.getElementById("t").innerHTML="ddddddddddd";     -----------A
$("#t").innerHTML="sdsds";      -----------B
 
document.getElementById("t") 得到的是dom對象,全部對象都有innerHTML
$("#t")得到的是jquery對象,無innerHTML
 
因此咱們能夠這樣使用:
$("#t").html("sdsds");
or
$("#t")[0].innerHTML="sdsds";

若是是innerText,也相似就是把html改爲Text便可。


相關文章:
JS實現雙擊內容變爲可編輯狀態

相關文章
相關標籤/搜索