参考: https://www.jb51.net/article/23966.htm
https://yq.aliyun.com/articles/260389
javascript
mysql中的 日期格式是: HHHH-MM-DD , 时间格式 是 HH:MM:SS[.fraction]php
而 datetime和 timestamp数据类型的 格式 是 date+time, 即 二者的格式都是 : 'HHHH-MM-DD HH:MM:SS'html
注意两类函数的区别: 一种是 返回当前日期或时间的函数; 一类是 提取 extract /截取 / 抽取 给定日期时间 变量中的 date 或 time.
好比: 获取当前 日期和时间的函数: now(), curdate(), curtime(),
而提取当前时间中的 部分值: date(now())....java
关于current_timestamp , 它既是一个函数, 也是一个 "mysql的内置的 常量"!
因此 select current_timestamp()
返回当前的时间戳,
而 一样的 select current_timestamp
一样会 返回跟上面同样的结果mysql
now([decision]) 有一个可选的 小数的精度位数, 最大是6jquery
6, 关于 datetime 和 timestamp数据类型的比较 参考: https://yq.aliyun.com/articles/260389
ajax
===================================sql
$(function(){...});
中, $ 里面的 function()本是就是一个 匿名函数了, 而后 你 又在这个匿名 函数 内, 再去定义 一个 有名函数. 那么这个 有名函数 就是 "函数中的函数"了, 就是一个 闭包函数了. 这个闭包函数 只是 在 $(function(){....// 在 这个里面的 做用域, 其余变量和函数 是可见 这个 "闭包的有名函数的...}); 除此以外, 在 $ 的 匿名函数的外面 , 是 看不到 里面的 你定义的 "有名函数"的.$(function(){.....});
内部! 你要定义 能够被 外部的 html标签 所看获得的 函数, 就不能 放在 $(function(){...}); 的匿名函数内. 应该直接 在 script标签 内定义 有名函数.$(function(){...})..
只是一个 语句, 只是 在 要求执行某些 语句的时候, 要求在全部 dom元素都 加载后 再执行的时候, 使用. 总之, 若是是 单独的 语句, 是能够放在 $(function(){...})..
里面的, 而若是是 函数 , 则必定 不能!这个闭包匿名函数 返回值 的问题, 已经 在多个地方 遇到过了: 闭包 = 匿名函数, 就至关于 一个盒子中的盒子, 咱们在外面 (有名函数 定义的外面 ), 是能够看获得 外面的那个盒子的, 可是咱们看不到 里面的 那个盒子. 所以, 里面的 那个盒子(匿名函数) 的返回值 , 咱们在外面是得不到的. 事实上, 里面那个闭包函数的返回值, 若是不用 全局变量/或 有名函数中 的 变量 去 接受的话, 那么 它在 执行 完毕后, 闭包函数的 栈内存就被清除了, 你在外面 就再也没法 跟踪了.json
所以, 好比 在$.each('iterated', function(){....return false; } )
遍历中 , 里面的 那个闭包 函数的 return false, 只是 可以终止each 对 iterator 的遍历, 这个 return false, 并不能返回到 each 语句 的外面去, each语句所在的外部 有名函数 实际上 是没有 返回值的!vim
=====================================
总的来讲 , 有两种:
一是: $('domselect')
的 load 函数
二是: 全局的 $函数: 包括 $.get, $.post , $.ajax 其中 get和post 是 $.ajax({type: 'get' , 'post',....})的 简写. 因此 对于 简单的ajax就用 $.post, 对于复杂的 ,就统一的用 $.ajax
并且 $.ajax中 包含复杂的 ajax事件(ajax事件, 就用 ajax方法内部来写就哈了, 不要再 去 单独的 调用ajax事件了)
$.ajax的data: 传递是是一个json格式的字符串, 而$.post 的data传递的是一个 json的对象。
而 complete,是指此次ajax 事件完成, 那么 它也无论ajax 请求发送、传递是否真的成功! 它只管事情结束了。
error事件的错误信息, 一般输出到 Firefox的调试控制台。
animal([speed], [easing], function()...)
可是, 若是没有特殊要求, 就只是 指定 一个 "动画"持续的 时间 /长短 就能够了关于 dom元素对象的 error事件: 主要包括两种类型的错误事件: 一是 $(window) 元素记录 script脚本的 错误, 二是 img的 src属性 无效时 触发error事件
使用 $(window).error(function(){msg, url, line){...}) 能够记录 script脚本的错误:
例子:
$(window).error(function(msg, url, line){ jQuery.post("js_error_log.php", { msg: msg, url: url, line: line }); });
关于jquery的属性函数,有 两个:attr 和 prop : 关于他们的区别,参考 https://www.cnblogs.com/linsx/p/6800136.html
和 https://www.cnblogs.com/zhwl/p/3520162.html
主要是: prop是用来设置 具备 true/false 值的属性, 好比 checked, selected, disabled 状态属性。 而attr是设置 非 boolean属性的。 attr的两种参数: 一是使用 js对象{....}的方式, 一是使用 attr('attrName', attrValue)的方式
注意的是: checked=“checked”或‘true’,只是决定了 defaultChecked 页面在第一次载入时的元素的状态值, 跟后来元素是否被checked的状态值无关
寻找 包含元素的两个方法,一个是 find, 一个是children。 他们的区别是: find查找的是 全部的 (祖先/)后代元素,即: descendant, 而children查找的则是 直接的下一级(父子)元素。
==============================
$.messager.progress('title', 'msg', 'warning', callback_func)...
要注意 , 最后一个参数 是回调函数, 是异步的!===================
参考: https://blog.csdn.net/yangzhongxuan/article/details/6542808
要充分运用 光标 跳跃的 技巧!
<br>
, \n是在 php中的换行. 又好比, 全部的标签好比script脚本标签, 自己也不过是一个普通的 html标签而已.提交按钮, 参数是字符串类型....就这么写 <input type="button" class="btn btn-primary btn-large" value="提交" onclick="chksub('{:I('get.jspinyin')}');"> 反之, 若是这样写就会出错: <input type="button" class="btn btn-primary btn-large" value="提交" onclick="chksub(" + {:I('get.jspinyin')} + "');"> 由于这里的 两个加号会按字符串原样显示, 根本不会做为js代码中的 字符串拼接来解释, 甚至, 即便你在onclick ="javascript: ....."写上 javascript: 也不行, 由于 它只认你前面的 那个 <input> 标签, 而不认为是 <script>标签
if($.trim($(this).val()=='') flag=false; return false; ....
了, 结果致使: each 方法不管如何 都 只是执行了一次, 就退出了. 事实上, 就只是检查了 "第一个 " input框 是否为空了. 后面的都没有检查到. 很明显, 这样的逻辑不是咱们想要的function chkAllInputUnempty(pinyin){ var flag=true; var fi='form#'+pinyin+' table tbody input'; $(fi).each(function(){ if($.trim($(this).val())== ''){ // 这里的 大括号是必需要加的!! 若是不加就只检查了 第一个input框是否为空 flag = false; return false; } }); return flag; }
要修改easyui的确认消息框中的ok/cancel的显示文字: $.messager.defaults = {ok: '是', cancel: '否'};
$.messager.confirm(...)
的执行方式是 异步 的, 因此 , 要使用 $.messager.confirm来决定是否关闭tabs的标签, 是比较麻烦的. 确实要使用异步的方式, 能够参考: http://www.jeasyui.net/plugins/160.html
, 里面有详细的例子:onBeforeClose: function(title, index){ var target = this; $.messager.confirm('注意', '真的要关闭: "'+title+'" 标签页吗?<br>若是评分没有提交,则以前所做的评分将会丢失!', function(r){ if(r){ var opts=$(target).tabs('options'); var bc=opts.onBeforeClose; opts.onBeforeClose=function(){}; $(target).tabs('close', index); opts.onBeforeClose = bc; } }); return false; }
var para = 'tea=' + tit + '&stud=' + '{$stu}' + '&cls=' + '{$curCls}'+'&py='+py if(tt.tabs('exists', tit)){ tt.tabs('select', tit); }else{ tt.tabs('add',{ title:tit, href:"{:U('pjcontent')}"+"/?"+para, // 这个是tp在U 方法中 传递附加参数 的 最关键的一步 写法. 在原来的地址(.../foo.html)后面, 是没有 斜杠的! 因此 要拼接字符串: '/?', 而后加上参数字符串用 & 链接的 closable:true,
$.messager.alert
! 由于 easyui的messager 不是独占的, 不会阻塞后面的函数的执行, 这样的话, 若是调用这个函数后, 后面还有其余提示框的话, 会形成同时有多个提示框出现的状况. 因此要避免在一个函数内同时出现多个 messager的状况!============================
dialog的属性: closable: false, // 是否显示关闭按钮
if(subBtnClkTimes==0){ /* 若是是第一次提交,则采用 "add方法进行插入记录" */ // getScore(); // 能够经过这个函数, 来填充div的内容 $('#dd').dialog({ title: '保存评分', width: 430, height:320, //left: 230, //top: 500, closable: false, // 是否显示关闭按钮 cache: false, content: getScore(jspinyin, curPjTeacher), // 或者经过这个 函数调返回值 来填充 dialog的内容 modal: true, buttons:[{ text: "提 交", iconCls: 'icon-ok', handler: function(){ $('#dd').dialog('close'); } }, { text: '取 消', iconCls: 'icon-cancel', handler: function(){ $('#dd').dialog('close'); } }] });
实际上, 在 弹出 dialog的时候, 是 在 body的最后面(包括 最后面的 js代码以后), 插入了 一个div.panel.window , 这个div包括几个部分, 其中包括一个: div.panel-header.panel-header-noborder.window-header, 这个是标题, 还有一个是dialog的主体内容部分, 就是 div.panel-body.panel-body-noborder.window-body, 可能还包括一个div.dialog-button按钮部分.
=============================
<br>
, 使用 : :s/\\n/<br>/g
也就是: vim的替换 , 要用 反斜杠 转义 , 而 标签 则不须要转义js的元素增删操做: jsarr.push(...), jsarr.unshift(...), jsarr.split(index, howmany, item1, item2,,,,), jsarr.slice(...), string.split等.
在javascript中, 若是 要对相同的 引号进行嵌套, 好比在 单引号中 嵌套 单引号, 在双引号中 嵌套 双引号, 这时, 要用 反斜杠进行 转义, 可是 一样的 需求 , 在html中 是不须要进行转义的, 能够直接进行书写!
=================================
注意 : status 和 statusCode 和 statusText不同: status是表示状态的 数字, 好比: 200, 404, 500等, statusCode是代码好比: ajax/v.., statusText才是 表示成功或失败的字符串文本,好比: success, 好比: "Not Found" 好比: "Server internal error" 等.
而 error等传入的参数就包括: xhr , 由于要进行更加深刻的错误调试!
dataType表示返回的数据类型, 主要有: html, script , text ,json:
其中: html和script中的js会首先在服务器端执行, 完了以后,做为文本返回. text返回的也是一个文本字符串
json 的话, 服务器端确实 是返回的 json格式的字符串, 可是 在success等回调函数的 js函数中, 根据 jquery的文档说明可知: ajax这个方法, 在给success的回调函数参数以前,, 已经把返回的json格式字符串 事先用 js语言的 JSON对象的方法: JSON.parse('json格式的字符串') 来解析, 已经 生成了 js对象, 而后 才 返回给 /传递 给 success的回调函数做参数了. 因此 在回调函数 中 就能够 直接做为 js对象处理了, 直接做为js对象 来 使用了, 好比:
判断 js的数据类型: 有 7种 : number, string, boolean, null, object , undefined, function 用 typeof 这个 "一元运算符" 来查询: typeof不是函数, 因此能够 不加括号, 由于是一元的, 因此将它写在 变量的前面.
$.ajax({ type: 'post', url: "{:U('url')}", dataType: 'json', // 返回json格式的字符串, 即在服务器端页面 要 拼接成 标准格式的json格式字符串. data:{'jsname':jss, 'foo": bar}, success: function(ret, statusText){ console.log("ret的类型:" + typeof ret); // 查看json格式的返回 给回调函数的结果 的数据类型 console.log(ret.name+ ':' + ret.age ); // 按js对象 来进行 元素成员的调用 console.log(statusText); }, error: function(xhr){ console.log(xhr); } }); 在 ajax的js返回值是: ret的类型: object (/// 很清楚的说了, 是 一个js对象了) jack:20 // 按js对象的 方式 来 使用了 success typeof {"a": 11, "b" : "22"} "object" typeof '{"a": 11, "b" : "22"}' // json格式的字符串. "string"
==========================