使用jquery與bootstrap實現了一個比較簡單但功能齊全的增刪改查功能的後臺管理頁面,雖然只是一個CRUD頁面,但麻雀雖小五臟俱全,JS經常使用的功能都用到了,本例用原生的jquery與bootstrap配合使用,不考慮JS的重構性及打包,該例子零耦合,開箱即用。javascript
先看Demo:php
一、獲取/賦值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
的一個簡化。簡化,因此就會省去不少參數。要用更多功能,就用$.ajax
。express
若是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"}
也就是說後面的參數若是和前面的參數存在相同的名稱,那麼後面的會覆蓋前面的參數值。
示例前端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="搜索" /> <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> <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> <button type="button" class="btn btn-danger" onclick="return delete_info({active_id})">刪除</button> </td> </tr> <!-- END list --> </tbody> </table> {page_str} <!-- 模態框(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"> × </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;
$("#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()); }) })
在一些網站上咱們常常看到交互性很強的功能。一些用戶資料能夠直接雙擊出現文本框,並在此輸入新的資料便可修改,無需再按肯定按鈕等。。
我在網上查了不少資料,但都有一個小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實現雙擊內容變爲可編輯狀態