本站创建于2006年,博主为Delphi老码农,暗黑忠实粉丝,主要用于学习经验分享
该日志由 samool 发表于 2020-06-14 22:36:00
Vue 将被侦听的数组的变异方法进行了包裹,所以它们也将会触发视图更新。
这些被包裹过的方法包括:
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
该日志标签: javascript, vue
该日志由 samool 发表于 2020-06-14 22:34:00
Vue组件实例,采用v-for循环输出内容
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<blog-post v-for="post in posts" :key="post.id" :title="post.title" :author="post.author" :description="post.description"></blog-post>
</div>
<script>
Vue.component('blog-post', {
props: ['id', 'title', 'author', 'description'],
template: '<div><h3>{{ title }}</h3><span>作者: {{ author }}</span><div>{{ description }}</div></div>'
})
var vm = new Vue({
el: '#app',
data: {
posts: [{
id: 1,
title: '文章1',
author: 'Loen',
description: "111111"
},
{
id: 2,
title: '文章2',
author: 'Kelly',
description: "222222"
},
{
id: 3,
title: '文章3',
author: 'Nier',
description: "333333"
}
]
}
});
</script>
</body>
</html>
该日志标签: javascript, vue
该日志由 samool 发表于 2020-02-27 22:45:00
源代码如下:
var second = 0;
window.setInterval(function () {
second ++;
}, 1000);
var tjArr = localStorage.getItem("jsArr") ? localStorage.getItem("jsArr") : '[{}]';
$.cookie('tjRefer', getReferrer() ,{expires:1,path:'/'});
window.onbeforeunload = function() {
if($.cookie('tjRefer') == ''){
var tjT = eval('(' + localStorage.getItem("jsArr") + ')');
if(tjT){
tjT[tjT.length-1].time += second;
var jsArr= JSON.stringify(tjT);
localStorage.setItem("jsArr", jsArr);
}
} else {
var tjArr = localStorage.getItem("jsArr") ? localStorage.getItem("jsArr") : '[{}]';
var dataArr = {
'url' : location.href,
'time' : second,
'refer' : getReferrer(),
'timeIn' : Date.parse(new Date()),
'timeOut' : Date.parse(new Date()) + (second * 1000)
};
tjArr = eval('(' + tjArr + ')');
tjArr.push(dataArr);
tjArr= JSON.stringify(tjArr);
localStorage.setItem("jsArr", tjArr);
}
};
function getReferrer() {
var referrer = '';
try {
referrer = window.top.document.referrer;
} catch(e) {
if(window.parent) {
try {
referrer = window.parent.document.referrer;
} catch(e2) {
referrer = '';
}
}
}
if(referrer === '') {
referrer = document.referrer;
}
return referrer;
}
该日志标签: js, javascript
该日志由 samool 发表于 2019-12-29 13:25:13
跳转页面主要使用window的两个对象方法,setInterval()和setTimeout()
定义和用法
setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
语法
setInterval(code,millisec[,"lang"])
参数 描述
code 必需。要调用的函数或要执行的代码串。
millisec 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。
语法
setTimeout(code,millisec)
参数 描述
code 必需。要调用的函数后要执行的 JavaScript 代码串。
millisec 必需。在执行代码前需等待的毫秒数。
<p id="page_div">将在5秒后自动跳转到首页</p>
<script language="javascript">
var num = 4; //倒计时的秒数
var URL = "index.html";
var id = window.setInterval('doUpdate()', 1000);
function doUpdate() {
document.getElementById('page_div').innerHTML = '将在'+num+'秒后自动跳转到首页' ;
if(num == 0) {
window.clearInterval(id);
window.location = URL;
}
num --;
}
</script>
<p id="page_div">将在5秒后自动跳转到首页</p>
<script language="javascript">
var num = 4; //倒计时的秒数
var URL = "index.html";
window.setTimeout("doUpdate()", 1000);
function doUpdate(){
if(num != 0){
document.getElementById('page_div').innerHTML = '将在'+num+'秒后自动跳转到首页' ;
num --;
window.setTimeout("doUpdate()", 1000);
}else{
num = 4;
window.location = URL;
}
}
</script>
该日志标签: js, javascript, 跳转
该日志由 samool 发表于 2019-12-16 17:13:00
最近在做项目中,遇到一个问题,在嫖哥的帮助完美解决。
需求是这样的:
1、删除数据前需要有一个确认提示
2、点击确认后使用异步AJAX发送POS请求,处理服务端返回信息,删除成功后返回ok
3、客户端接收到ok信息后,remove数据行
4、操作成功跳转页面
5、如果收到error信息,客户端给出提示
代码如下:
$('#btndo').click(function () {
swal({
title: "你确定要清空吗?",
text: "缓存文件删除后将无法恢复!",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "是的,删除",
closeOnConfirm: false
}, function () {
$.ajax({
url: "<?PHP echo u('cache', 'DoClear');?>",
type: "POST",
dataType: "json",
data:$("#configform").serialize(),
success: function(res) {
console.log(res);
if(res.status == 'error'){
//alert(res.data);
toastr.error(res.data);
}else{
toastr.success('恭喜您,操作成功!');
setTimeout(function(){
location.href = '<?php echo u("cache", "index");?>';
}, 500);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log(XMLHttpRequest.status);
console.log(XMLHttpRequest.readyState);
console.log(textStatus);
alert(textStatus);
}
})
});
});
该日志标签: javascript, jquery, ajax
该日志由 samool 发表于 2019-12-14 20:17:00
W3C最新规定,当checkbox未选中,post不会将值提交到服务器,这就出现了一个变量未初始化的问题,看网上有很多朋友增加隐藏表单的方式解决,如果有多个checkbox的话,会增加很大的代码量。
**我找到一个简单的解决办法:
1、通过jquery将value为1的自动设置为checked选中状态
2、提交时执行getCheckBoxVal函数,遍历所有checkbox,将已经选中的,将值设置为1
3、将未选中的选项value设置0,把checkbox选项设置为checked,保持选中状态,保证提交到服务器。**
此方法同样适用于radio组件。
<script>
$(document).ready(function() {
$("#configform").find("input:checkbox[value='1']").prop('checked',true);
})
function getCheckBoxVal(){ //提交前执行,将选中的checkbox的value设置为1,将未选中的checkbox也设置为checked,将值设置为0
$("#configform").find('input:checkbox').each(function() { //遍历所有复选框
if ($(this).prop('checked') == true) {
$(this).val('1');
}
else{
$(this).prop('checked',true);
$(this).val('0');
}
});
}
</script>
该日志标签: js, javascript, jquery, checkbox
该日志由 samool 发表于 2019-12-14 17:25:00
1.导入switchery.css文件
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/switchery/switchery.css">
2.导入switchery.js文件
<script type="text/javascript" src="${pageContext.request.contextPath }/switchery/switchery.js"></script>
3.html代码
<div class="form-group">
<label for="inputEmail3" class="col-sm-3 control-label" id="serIsCan">是否可用</label>
<div class="switch">
<input type="checkbox" class="js-switch" checked="">
<span id="enable_status"></span>
</div>
</div>
4.初始化switchery
var elem = document.querySelector('.js-switch');
//size 设置禁用可用按钮的大小、secondaryColor:设置右边的颜色为红色
var switchery = new Switchery(elem,{size:"large",secondaryColor:"red"});
设置switchery的禁用、可用样式
/**
* 设置“禁用/可用”的按钮样式
* @param switchElement
* @param checkedBool
*/
function setSwitchery(switchElement, checkedBool) {
if ((checkedBool && !switchElement.isChecked()) || (!checkedBool && switchElement.isChecked())) {
switchElement.setPosition(true);
switchElement.handleOnchange(true);
}
}
当“禁用/可用”按钮发生改变时,获取当前状态
elem.onchange = function() {
//获取按钮的选中状态
isChecked = elem.checked;
};
设置按钮的可用、禁用状态
//禁用
switchery.disable();
//可用
switchery.enable();
该日志由 samool 发表于 2019-12-04 10:25:00
datatables实在太强大,太方便,我这里说的仍然是冰山一角,下面附录是摘自网上,常用的属性和方法
要注意的是,要被dataTable处理的table对象,必须有thead与tbody,而且,结构要规整(数据不一定要完整),这样才能正确处理。
以下是在进行dataTable绑定处理时候可以附加的参数:
属性名称 | 取值范围 | 解释 |
bAutoWidth | true or false, default true | 是否自动计算表格各列宽度 |
bDeferRender | true or false, default false | 用于渲染的一个参数 |
bFilter | true or false, default true | 开关,是否启用客户端过滤功能 |
bInfo | true or false, default true | 开关,是否显示表格的一些信息 |
bJQueryUI | true or false, default false | 是否使用jquery ui themeroller的风格 |
bLengthChange | true or false, default true | 开关,是否显示一个每页长度的选择条(需要分页器支持) |
bPaginate | true or false, default true | 开关,是否显示(使用)分页器 |
bProcessing | true or false, defualt false | 开关,以指定当正在处理数据的时候,是否显示“正在处理”这个提示信息 |
bScrollInfinite | true or false, default false | 开关,以指定是否无限滚动(与sScrollY配合使用),在大数据量的时候很有用。当这个标志为true的时候,分页器就默认关闭 |
bSort | true or false, default true | 开关,是否让各列具有按列排序功能 |
bSortClasses | true or false, default true | 开关,指定当当前列在排序时,是否增加classes 'sorting_1', 'sorting_2' and 'sorting_3',打开后,在处理大数据时,性能有所损失 |
bStateSave | true or false, default false | 开关,是否打开客户端状态记录功能。这个数据是记录在cookies中的,打开了这个记录后,即使刷新一次页面,或重新打开浏览器,之前的状态都是保存下来的 |
sScrollX | 'disabled' or '100%' 类似的字符串 | 是否开启水平滚动,以及指定滚动区域大小 |
sScrollY | 'disabled' or '200px' 类似的字符串 | 是否开启垂直滚动,以及指定滚动区域大小 |
-- | -- | -- |
选项 | ||
aaSorting | array array[int,string], 如[], [[0,'asc'], [0,'desc']] | 指定按多列数据排序的依据 |
aaSortingFixed | 同上 | 同上。唯一不同点是不能被用户的自定义配置冲突 |
aLengthMenu | default [10, 25, 50, 100],可以为一维数组,也可为二维数组,比如:[[10, 25, 50, -1], [10, 25, 50, "All"]] | 这个为选择每页的条目数,当使用一个二维数组时,二维层面只能有两个元素,第一个为显示每页条目数的选项,第二个是关于这些选项的解释 |
aoSearchCols | default null, 类似:[null, {"sSearch": "My filter"}, null,{"sSearch": "^[0-9]", "bEscapeRegex": false}] | 给每个列单独定义其初始化搜索列表特性(这一块还没搞懂) |
asStripClasses | default ['odd', 'even'], 比如['strip1', 'strip2', 'strip3'] | 指定要被应用到各行的class风格,会自动循环 |
bDestroy | true or false, default false | 用于当要在同一个元素上执行新的dataTable绑定时,将之前的那个数据对象清除掉,换以新的对象设置 |
bRetrieve | true or false, default false | 用于指明当执行dataTable绑定时,是否返回DataTable对象 |
bScrollCollapse | true or false, default false | 指定适当的时候缩起滚动视图 |
bSortCellsTop | true or false, default false | (未知的东东) |
iCookieDuration | 整数,默认7200,单位为秒 | 指定用于存储客户端信息到cookie中的时间长度,超过这个时间后,自动过期 |
iDeferLoading | 整数,默认为null | 延迟加载,它的参数为要加载条目的数目,通常与bServerSide,sAjaxSource等配合使用 |
iDisplayLength | 整数,默认为10 | 用于指定一屏显示的条数,需开启分页器 |
iDisplayStart | 整数,默认为0 | 用于指定从哪一条数据开始显示到表格中去 |
iScrollLoadGap | 整数,默认为100 | 用于指定当DataTable设置为滚动时,最多可以一屏显示多少条数据 |
oSearch | 默认{ "sSearch": "", "bRegex": false, "bSmart": true } | 又是初始时指定搜索参数相关的,有点复杂,没搞懂目前 |
sAjaxDataProp | 字符串,default 'aaData' | 指定当从服务端获取表格数据时,数据项使用的名字 |
sAjaxSource | URL字符串,default null | 指定要从哪个URL获取数据 |
sCookiePrefix | 字符串,default 'SpryMedia_DataTables_' | 当打开状态存储特性后,用于指定存储在cookies中的字符串的前缀名字 |
sDom | default lfrtip (when bJQueryUI is false) or <"H"lfr>t<"F"ip> (when bJQueryUI is true) | 这是用于定义DataTable布局的一个强大的属性,另开专门文档来补充说明吧 |
sPaginationType | 'full_numbers' or 'two_button', default 'two_button' | 用于指定分页器风格 |
sScrollXInner | string default 'disabled' | 又是水平滚动相关的,没搞懂啥意思 |
DataTable支持如下回调函数
回调函数名称 | 参数 | 返回值 | 默认 | 功能 |
fnCookieCallback | 1.string: Name of the cookie defined by DataTables 2.object: Data to be stored in the cookie 3.string: Cookie expires string 4.string: Path of the cookie to set | string: cookie formatted string (which should be encoded by using encodeURIComponent()) | null | 当每次cookies改变时,会触发这个函数调用 |
fnDrawCallback | 无 | 无 | 无 | 在每次table被draw完后调用,至于做什么就看着办吧 |
fnFooterCallback | 1.node : "TR" element for the footer 2.array array strings : Full table data (as derived from the original HTML) 3.int : Index for the current display starting point in the display array< 4.int : Index for the current display ending point in the display array 5.array int : Index array to translate the visual position to the full data array | 无 | 无 | 用于在每次重画的时候修改表格的脚部 |
fnFormatNumber | 1.int : number to be formatted | String : formatted string for DataTables to show the number | 有默认的 | 用于在大数字上,自动加入一些逗号,分隔开 |
fnHeaderCallback | 1.node : "TR" element for the header 2.array array strings : Full table data (as derived from the original HTML) 3.int : Index for the current display starting point in the display array 4.int : Index for the current display ending point in the display array 5.array int : Index array to translate the visual position to the full data array | 无 | 无 | 用于在每次draw发生时,修改table的header |
fnInfoCallback | 1.object: DataTables settings object 2.int: Starting position in data for the draw 3.int: End position in data for the draw 4.int: Total number of rows in the table (regardless of filtering) 5.int: Total number of rows in the data set, after filtering 6.string: The string that DataTables has formatted using it's own rules | string: The string to be displayed in the information element. | 无 | 用于传达table信息 |
fnInitComplete | 1.object:oSettings - DataTables settings object | 无 | 无 | 表格初始化完成后调用 |
fnPreDrawCallback | 1.object:oSettings - DataTables settings object | Boolean | 无 | 用于在开始绘制之前调用,返回false的话,会阻止draw事件发生;返回其它值,draw可以顺利执行 |
fnRowCallback | 1.node : "TR" element for the current row 2.array strings : Raw data array for this row (as derived from the original HTML) 3.int : The display index for the current table draw 4.int : The index of the data in the full list of rows (after filtering) | node : "TR" element for the current row | 无 | 当创建了行,但还未绘制到屏幕上的时候调用,通常用于改变行的class风格 |
fnServerData | 1.string: HTTP source to obtain the data from (i.e. sAjaxSource) 2.array objects: A key/value pair object containing the data to send to the server 3.function: Function to be called on completion of the data get process that will draw the data on the page. | void | $.getJSON | 用于替换默认发到服务端的请求操作 |
fnStateLoadCallback | 1.object:oSettings - DataTables settings object 2.object:oData - Object containing information retrieved from the state saving cookie which should be restored. For the exact properties please refer to the DataTables code. | Boolean - false if the state should not be loaded, true otherwise | 无 | 在cookies中的数据被加载前执行,可以方便地修改这些数据 |
fnStateSaveCallback | 1.object:oSettings - DataTables settings object 2.String:sValue - a JSON string (without the final closing brace) which should be stored in the state saving cookie. | String - the full string that should be used to save the state | 无 | 在状态数据被存储到cookies前执行,可以方便地做一些预操作 |
该日志标签: javascript, jquery, datatables
该日志由 samool 发表于 2019-12-04 10:15:06
参考官方文档
DataTables安装
第一步引入JS,CSS
第二步:配置基本HTML
第三步:配置DataTables 基本参数
<!--第一步:引入Javascript / CSS (CDN)-->
<!-- DataTables CSS -->
<link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.15/css/jquery.dataTables.css">
<!-- jQuery -->
<script type="text/javascript" charset="utf8" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<!-- DataTables -->
<script type="text/javascript" charset="utf8" src="http://cdn.datatables.net/1.10.15/js/jquery.dataTables.js"></script>
<!--或者下载到本地,下面有下载地址-->
<!-- DataTables CSS -->
<link rel="stylesheet" type="text/css" href="DataTables-1.10.15/media/css/jquery.dataTables.css">
<!-- jQuery -->
<script type="text/javascript" charset="utf8" src="DataTables-1.10.15/media/js/jquery.js"></script>
<!-- DataTables -->
<script type="text/javascript" charset="utf8" src="DataTables-1.10.15/media/js/jquery.dataTables.js"></script>
<!--第二步:添加如下 HTML 代码-->
<table id="table_id_example" class="display">
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Row 1 Data 1</td>
<td>Row 1 Data 2</td>
</tr>
<tr>
<td>Row 2 Data 1</td>
<td>Row 2 Data 2</td>
</tr>
</tbody>
</table>
<!--第三步:初始化Datatables-->
$(document).ready( function () {
$('#table_id_example').DataTable();
} );
下面这些参数的配置,都是1.10.15 版本最新的配置参数,sPaginationType,iDisplayLength,bSort,bLengthChange,fnServerParams 这些参数在新版本中已经变了,虽然 DataTables向下兼容,但是不再推荐使用了。
//表格全局设置, 配置已更新为新版本
//把公共的设置项都放在这里,就不需要每个页面都设置一遍了,放在jQuery对象上是为了避免污染全局变量
$.fn.dtconfig = {
processing: true,//是否显示加载中提示
autoWidth: false,//是否自动计算表格各列宽度
info: true,//是否显示页数信息
pagingType:"full_numbers",
pageLength :10,//默认每页显示多少条记录
searching: false,//是否显示搜索框
ordering:false,//是否允许排序
serverSide: true,//是否从服务器获取数据
stateSave: false,//页面重载后保持当前页
lengthChange: true,//是否显示每页大小的下拉框
lengthMenu: [ 10, 15,25, 50, 75, 100 ],//长度菜单
language: {
lengthMenu: "每页显示 _MENU_记录",
zeroRecords: "没有匹配的数据",
info: "第_PAGE_页/共 _PAGES_页 ( 共\_TOTAL\_条记录 )",
infoEmpty: "没有符合条件的记录",
search: "查找",
infoFiltered: "(从 _MAX_条记录中过滤)",
paginate: { "first": "首页 ", "last": "末页", "next": "下一页", "previous": "上一页" }
},
responsive: true,
scrollX: true,//横向滑动
//deferRender: true,//控制表格的延迟渲染,可以提高初始化的速度
//dom: 'lBrtip',//DataTables 各模块显示位置
//buttons: [// DataTables Button 扩展,使用时,需要引入插件相关的JS
// //{
// // extend: "copy",
// // className: "btn-sm"
// //},
// //{
// // extend: "csv",
// // className: "btn-sm"
// //},
// {
// extend: "excel",
// text: "导出本页(Excel)",
// className: "btn-primary",
// filename:"人员表"
// },
// //{
// // extend: "pdfHtml5",
// // className: "btn-sm"
// //},
// //{
// // extend: "print",
// // className: "btn-sm"
// //},
//]
}
公共部分放在通用的JS种, 我们每个页面,就可以直接这样使用了:
$('#table_id_example').DataTable($.fn.dtconfig);
该日志标签: javascript, jquery, datatables