bs模态框中的form获取或设置表单及其中元素用nam不能用id?
-
用
$('form#formid').submit();
居然不能提交表单? 感觉好奇怪? -
最后用
alert($('form#formid').attr('form_some_attr_example_id'))
居然显示的是 undefined 然后再看alert($('form#formid').attr('action'))
居然也是undefined? -
那么难怪
$('form#formid').attr('action', 'some_action_addr')
设置表单的action地址自然就是无效的了, 甚至连 表单 $('form#formid') 都是undefined, 都没有获取到这个表单, 自然submit() 就不会生效 跳转, 也就是不提交表单了
=====================================================
这个只是在模态框中的表单, 才存在这样的问题? 而在html>body下的表单则不存在这样的问题?
也就是说, 模态框中的表单/及其下面的input组件 要获取它们, 要用 它们的 name属性 , 而不能使用 id属性??
用name属性可以获取 模态框中的表单 及其包含的input组件??
- 是因为 每次创建 "新的" 模态框, id不能重复, 而name可以重复的原因吗?
模态框中的表单 form 标签 和 div.modal>div.modal-dialog>div.modal-content下的 modal-body之间的相对位置, 有 多写法, 推荐使用 form标签 包含 模态框的 modal-body和 modal-footer, 即将form中的内容放在body和footer之间, <form>
标签放到div.modal-body之前, 而</form>
放在div.modal-footer之后
=================================
多个按钮button打开同一个 模态框的时候, 如何清除 上一个按钮打开的模态框中的内容?
- 首先, 应该是在 模态框的 show.bs.modal事件中去清除上一次的数据, 是在show方法后,单是表单还没有显示出来之前.
- 其次是, 清除表单数据 是可以用reset()方法的 但是: jquery没有 reset()方法! 只有 submit() 事件方法.(有:reset选择器), 所以要用 $('form')[0].reset()
- 也可以用其他变通的方法: `` $('form[name=mdForm] input').val('');`
- 要注意的是: reset方法不会清除input[type=hidden]隐藏input的值????
- reset方法和 $('form input').val('')的区别? reset()方法实际上并不是将表单的input清空, 而是 恢复(重置) input组件的值 为 它们的 "默认值" 所以如果
<Input type="text" name="username" value="abc" >的话, 每次reset重置后input框都是abc, 而不是空. 所以用 $('form input').val('') 会更好更彻底
$('#logModal').on('show.bs.modal', function(e){
// 应该先初始化表单数据, 而表单标题和usrtype可以随后获得
$('form[name=mdForm] input').val(''); // 这个更安全更彻底
// $('form')[0].reset(); 这个也可以
var button = $(e.relatedTarget);
var btext = button.text();
var bid = button.attr('id');
var modal = $(this);
modal.find('.modal-title').html("<font color=#363>"+btext+"</font>");
modal.find('.modal-body input#usrtype').val(bid);
// $('form')[0].reset(); 放在这里也是可以的, 要注意: reset方法不会清除input[type=hidden]隐藏input的值?
});
在表单提交时, 如果是提交/传递的 敏感信息, 如用户名和密码不希望浏览者看到的话, 就要用 post方式提交信息. 这时, 就不需要(不必要)在 {:U('....')}方法中传递参数了.
直接在后台用 $_POST[...]来获取了.
tp中的DATA_PATH TEMP_PATH ??
ls -l (ll) 命令中的total是指 所列出的资源 占用的 blocks的总数
- 用
getconf PAGESIZE
命令可以得到系统 存储时的 block的大小, 一般是4kb, ll列出的是 每个文件/目录占用的bytes字节数 - 存储文件时, 是按block 定量占用的,超过4kb的文件, 就占用多个"连续的?" blocks? 不足一个1block的 也占1个block. 而且不能 "插队, 抢位", (事实上,文件/目录是按 创建该文件时的时间先后来存放的, 而不是 你来堆放的), 最后所有的blocks加起来就是ll命令的total数
用select (* from ... ) into outfile ....导出时,无法写?
- 在mysql内部, 用 show variables like "secure_file_priv%" 查看 secure_file_priv 变量的值, 是 null, 还是 没有, 还是具体的值 比如 '/opt'
- 如果是null, 就不能导出; 如果是 "没有" 就没有限制, 如果是具体的值, 就只有在 指定的目录中导出;
- 当然还得要 mysql 具有对指定目录的写权限
在 /etc/my.cnf文件中 的 [mysqld]节设置
[mysqld]
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 设置mysql导入和导出权限?
secure_file_priv='/opt' (用引号 'opt' 是正确的)
select ... into outfile 的一个例子 https://www.cnblogs.com/wxzhe/p/10831634.html
options导出选项:
fields terminated by描述字段的分隔符,默认情况下是tab字符( )
optionally enclosed by描述的是字段的括起字符。
escaped by描述的转义字符。默认的是反斜杠(backslash: )
lines terminated by : 行与行之间的分隔
root@newsdb 01:50:35>select * from t_hk_stock_news limit 3 into outfile "/db/test2.csv" fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by "
";
Query OK, 3 rows affected (0.01 sec)
在logs中的 somedate.log文件中的 2000-1-1T10:00:00Z 表示的是UTC格式的时间, T表示的是time??
实际上, mysql还有很多"外部管理命令", 就是 不登陆mysql服务器, 仍然可以对服务器进行管理的工具 比如mysqladmin, mysqldump等等. 这些命令跟其他linux命令一样, 也可以用--help来查看命令的帮助, 比如: mysqladmin --help
- msyql服务器的登录用户 -u root 和 linux的root帐户并不是 一回事! ?? msyql的-uroot 只不过是 "登录" mariadb服务器的一个账号,这个帐号跟其他登录mariadb服务器 的帐号的性质是一样的,只不过它的权限很大而已. 但是并不表示这个root就是 linux的帐户root.
- 实际上 真正运行mysql服务器 进程的用户是 mysql ! 跟启动mysql的用户是foo还是 root 是无关的!
- 所以在 mysql内部, 要导出数据时, 由于应用的是 mysql用户, 所以很多时候, 你可能会得到 [can't write permisson denied...]之类的错误, 就是因为 mysql用户没有这些
目录的写 权限.
-mysql服务器会运行很多 线程 "thread id", 用 show processlist
查看线程id, 如果这个线程卡住了(比如执行某个很大表的一些操作, 表被卡住了), 就可以用 kill thread_id命令来结束它.
[root@localhost le]# ps -aux |grep 'mysql'
mysql 4134 0.0 0.1 5600 2936 ? Ss 13:43 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql 4251 0.0 2.8 629020 70732 ? Sl 13:43 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
## 前面两行才是真正运行mariadb服务器的用户, 即是mysql
le 4905 0.0 0.2 15356 6300 pts/1 S+ 14:19 0:00 mysql -uroot -p # 这一行表示 启动mysql 的用户 是 le
root 4908 0.0 0.0 5096 2200 pts/0 S+ 14:19 0:00 grep --color=auto mysql # 这一行表示 当前搜索/过滤 mysql关键字的用户 是 root
[root@localhost lee]#
修改mysql登录密码的三个方法, 参考 https://blog.csdn.net/xuheng8600/article/details/80034647?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
- 外部命令 mysqldump -uroot password 'abc'
- 进入mysql内, 使用set password=password('abc');
- 进入mysql内, 用
update mysql.user set password=password('abc') where user='root';
最后 刷新权限: flush privileges;
如果mysql服务器没有密码, 输入命令时,可以不用 -p选项, 就是: mysql -uroot
就好了, 只有设置了密码时, -p选项才是必须的,
当然在生产服务器上, 密码是必须的, 而且是强密码.
========================================================
关于vim中的命令问题, 与其到处gogl答案,不如直接在vim中看help!
使用ls使的显示问题%a, #a
ls是 show all buffers.
%: 表示在当前窗口中显示的buffer: buffer in the current window
: 表示 在同一个子窗口中, (如果曾经打开了多个buffer文件)可以交替打开的buffer文件. 用 ctrl+^ 操作, 或 :e # 命令就可以切换
而命令:bp或bn, 不是alternative buffer切换, 而是 在 minibufexploer窗口中, 按前后顺序排列的 buffer队列中的前一个和后一个buffer.
- linux文件夹, 目录排序中, 箭头的方向代表 项目值,比如 size, modified time 等 增加的方向. (由此可以判断列表升序还是降序)
============================================================
关于tp中的缓存?
-
目录? 缓存主要是放在 /App 下的Runtime目录 里面有 Data + Temp (这两个目录不分模块) + Cache + Logs(后两个目录分模块放置)
-
默认的file缓存方式的缓存数据 放在 TEMP_PATH中, 几个路径是:
DATA_PATH是 ./Piao/Runtime/Data/, TEMP_PATH是 ./Piao/Runtime/Temp/, 而 HTML_PATH 是 ./Piao/Html/
HTML_PATH在创建 静态缓存 之前, 是没有生成的. -
在convention.php中设置的file缓存类型 的数据缓存默认目录是
'DATA_CACHE_PATH' => TMEP_PATH
, 为什么使用 F 方法后的数据缓存文件却在DATA_PATH
中了呢? 其实这个不矛盾: 说那个TEMP_PATH时说如果使用 S()函数的时候, 会生成在TEMP_PATH中.
但是 F 函数在定义中 , 就规定了一个 缺省的默认参数,即这里的$path, 它就是DATA_PATH, 其原型是:function F($name, $value='', $path=DATA_PATH) {....}
所以用F()函数生成数据缓存时就是在 DATA_PATH中, 也就是说, 数据缓存目录有两个, 一个是DATA_PATH, 一个是TEMP_PATH, 那就看你是用的哪个函数.
F()方法的第二个参数$value是缓存的数据, 默认是空, 也就是说, 如果你想缓存一个 "空值", 你直接就可以用 F('cache_name')就好了, 不过写成 F('cache_name', '')更直观. -
如果缓存的数据是一个数组, 要获取缓存数组的元素值,要用 中括号, 而不能用点号或->
if($cp = M('curp')->find()){
$this->cp = $cp;
F('curp', $cp);
}else{
F('curp', '');
}
// $cache = F('curp');
echo 'curp的 cury缓存数据是: '.F('curp')['cury'];die; 或: $cache['cury']
php的数据类型和恒等比较?
- php的数据类型有: 字符串, 整数(10, 0x11十六进制, 011 8进制) , 浮点数, 逻辑数, 数组, 对象,null
- 查看数据类型, 用gettype 和var_dump, 前者gettype 得到类型的"完整"字符串, 而var_dump得到简写的表示: 对应的是:
gettype($var): string, integer, double, boolean, array, object, NULL
var_dump($ar): string, int(10), float(2.1), bool(false), array, object, NULL - 而 tp中的 F('cache_name')数据缓存的结果, 可能是false, 也可能是null, 也可能是具体的值, 所以如果F(...) 返回的是false, 则用 !==null 判断时就会失败!
===============================================
对比比较js的变量类型? 参考: blog.csdn.net/weixin_33804990/article/details/88021078
- js的变量类型较多: 像 string,number,boolean, undefined(一个变量定义后, 没有赋值比如var a; typeof a就是undefined), 检查用typeof
- js的对于 null, array, object用typeof检查都会得到'object' , 所以要用 instanceof , 或 constructor 来检查, 但是 对于array数组由于 它的 __proto__原型链 属性对应的函数原型prototype 是像等的,所以
a_array_var.__proto__ === Object.prototype //返回true
var_arr instanceof Array
会得到object - js检查变量类型的终极方法是用:
Object.prototype.toString.call(a_var_to_check)
可以检查任何类型的js变量(包括基本类型的变量和引用类型的变量)
如何禁止表单中的 密码框被浏览器自动填充? 参考https://blog.csdn.net/zengdeqing2012/article/details/52514128
因为: 浏览器自动填充的是 在表单中找到的第一个类型为password的密码框,所以用一个隐藏的密码框来避免真正的密码框被自动填充
<div class="form-group">
<label class="col-md-2 control-label" for="">密码:</label>
<div class="col-md-10">
<input type="password" style="display:none"> // 隐藏的密码域
<input class="form-control" type="password" name="passwd" placeholder="输入密码">
</div>
firefox的一个很好的插件 : colorZilla(颜色吸管, 颜色吸取器): 在about:addons中, 点 "get add-ons" 转到firefox的插件中心搜索即可. 该插件可以查看吸取历史, 更强大的是, 它可以分析 当前网页中所有存在的 css颜色! 而且指出该颜色 所使用的 选择器!
- 在firefox的调试器中看到的 status code: 304 表示的是 该文件在web客户端的缓存 仍然有效, 所以不用再次 从服务器上下载了!
- js中的console.log 现在不能直接在 console中查看了, 要打开 logging 标签页才能看到?
fileReader的属性和事件
reader = new FileReader() 这时reader实例有三个属性: error, result,和 readyState (0: 还没有加载任何数据(到内存), 1: 正在加载; 2: 完全加载到内存,即成功读取文件数据)
事件: onbort, onloadstart, onload, onloadend, onprogress
方法: bort(), load(), ....
FileReader { readyState: 1, result: null, error: null, onloadstart: null, onprogress: null, onload: null, onabort: null, onerror: null, onloadend: null } jquery.js%20line%202%20%3E%20eval:102:7
File.lastModifiedDate is deprecated. Use File.lastModified instead. jquery.js%20line%202%20%3E%20eval:94:6
FileReader { readyState: 2, result: "logo h1 { background-image: url…", error: null, onloadstart: obj.uploadAdd/</reader.onloadstart(), onprogress: null, onload: obj.uploadAdd/</reader.onload(), onabort: null, onerror: obj.uploadAdd/</reader.onerror(), onloadend: obj.uploadAdd/</reader.onloadend() } jquery.js%20line%202%20%3E%20eval:116:7
========================================
break is not in the loop or switch语句中?
- 并不是说 break语句可以放在while循环内的任意地方, 必须放在 while 或switch 语句的 直接包含大括号中
- 通常, 可能要在while中用if语句等进行条件判断, 以跳出while循环, 判断条件为真时, 不能就在这里break, 要在while大括号直接包含的区域 判断条件然后用break
while(1){
$('div.uc>p').html("正在读取数据, 请等待...");
reader.onload = function(){
if(this.readyState == 2){
content = reader.result;
isReadSuc = true;
// 不能在这里写break;
};
// 也不能在这里写break;
};
if(isReadSuc)break;
}
用这样的 while(1) 容易造成系统或浏览器卡死的问题?
var isReadSuc = false;
while(1){
$('div.uc>p').html("正在读取数据, 请等待...");
reader.onload = function(){
if(this.readyState == 2){
content = reader.result;
isReadSuc = true;
};
};
if(isReadSuc)break;
}
$('div.uc>p').html(reader.result);
$('div.showuc').css('display','block');
================================================================
bs中的全局 用来显示或隐藏的类? 可以在全局任意的使用!
- 对于 任意的 元素都可以有效的是: .show, .hidden(或 .sr-only也可以隐藏)
- 但是不要使用 .hide了, 现在已经被废除了
- 也可以用 .invisible, 但是和 .hidden的区别是 一个的css 为 display:none, 一个的css为 display: invisibility
关于checkbox的两个属性checked, 和 value的区别?
- 实际上这是两个互不相关, 没有半毛关系的两个属性! checkbox复选框的value值跟该复选框是否被选中还是没有被选中无关, 它的value值一直不变! 除非你设置了 当checked时的value1, 当unckecked时的valu2, 这样才会改变
- attr用来明确的在元素上设置了 属性名称的 属性值 比如: attr('name') ; 而prop用来获取没有 明确设置属性名称的属性值, 比如 是否选中的状态: prop('checked"), is(':checked').
- 不要企图 在 messager 消息框中(在回调函数中) 去获取 消息中的 input:checkbox的 选中状态! 因为单击"确定"时, 这个选中状态 你并不能获取到????: