Submitted by gouki on 2010, May 11, 9:06 AM
这篇文章我一直在纠结,是否要摘录过来,但我还是最终决定放上来了。
其实大家都知道,在网页中,可见的按钮有三种,一种是input,一种是button,最后一种,其实也不能管是按钮,它是由img转化而来的。最最常用的还是input和button,在以前的日子里,大家都习惯于用input,因为他直接拥有type=submit,而button没有,它更适合于表达button。
然而。。。
XML/HTML代码
- 首先,在IE6里,如果一个表单里有多个button形式的提交按钮,那么不管你点击其中哪个按钮,所有的button按钮都会被提交,而在IE7,8里则点击哪个按钮,才提交哪个button按钮。此时,如果想在服务端判断用户点击了哪个按钮,只能使用Javascript来处理。
这点,在不同浏览器对回车提交表单的处理办法已经提过,但老王说的这个是变量的传递,以及在指定name的时候,POST变量的值的变化。不废话看原文:
最近写代码,处理很多表单,里面的Submit按钮有两种形式,分别是input和button,有点区别,做个试验:
先创建一个php文件demo.php, 用来接收表单数据:
<?php
var_dump($_POST);
?>
再创建一个html文件demo.html, 用来显示表单:
<form method="post" action="demo.php">
<input type="submit" name="foo" value="提交">
<input type="submit" name="bar" value="保存">
</form>
<form method="post" action="demo.php">
<button type="submit" name="foo" value="foo_value">提交</button>
<button type="submit" name="bar" value="bar_value">保存</button>
</form>
使用Firefox依次浏览,就能看到input和button的区别:input提交按钮显示的文字就是value,而button提交按钮显示的文字 和value是独立的,从这个意义上来看,button更有表现力,是更值得推荐的提交按钮实现方式。
可惜IE总是拖后腿,使用IETester里的 IE6,7,8分别浏览,就会发现button提交按钮在IE下有Bug:
首先,在IE6里,如果一个表单里有多个button形式的提交按钮,那么不管你点击其中哪个按钮,所有的button按钮都会被提交,而在IE7,8里 则点击哪个按钮,才提交哪个button按钮。此时,如果想在服务端判断用户点击了哪个按钮,只能使用Javascript来 处理。
另外,在IE6,7,8里,button形式的按钮在提交后,value属性都失效了,显示文字取代了value。
总结:从理论上来看,button形式的提交按钮优于input形式的提交按钮。但如果考虑浏览器通用性,很多时候还是只能使用input形式的提交按 钮。
参考:http://www.w3.org/TR/html401/interact/forms.html
老王的文章在:表 单提交按钮input和button的取舍
Tags: form, input, button
PHP | 评论:0
| 阅读:27402
Submitted by gouki on 2010, May 10, 9:39 AM
来自于hello,JavaScript的收藏,我也小小的收藏一下:
http://www.beiju123.cn/blog/?p=513
- F = 8×{100-[4×(JS文件数-3)+4×(CSS文件数-2)+3×(CSS背景图连接数-6) ] }
- +6×(100-10×未使用CDN的连接个数)
- +10×[100-11×(Expire时间小于172800秒的连接个数) ]
- +8×[100-11×(文件大小大于500字节且 未使用gzip的连接个数)]
- +4×[body中没有CSS连接 ? 100∶ (99-10×body中的CSS连接数) ]
- +4×(100-5×head中的JavaScript连接数)
- +3×[不存在CSS表达式 ?100: (90-2×CSS表达式数目) ]
- +3×[100-5×(域名数-4)]
- +4×(100-10×未精简的CSS与JS个数)
- +4×(100-10×Redirect个数)
- +4×[100-5×(重复的JavaScript个数+重复的CSS个数) ]
- +2×(100-11×未使用Etag的连接个数)
- +4×(100-5×未缓存或者缓存时间不足3600秒的AJAX请求个数)
- +3×(100-5×请求方式不是GET的AJAX个数)
- +3×{DOM元素数量<MaxDOM ?100∶ [99-10×⌈((DOM元素数量-900))/250⌉ ] }
- +4×(100-5×状态为404的连接个数)
- +3×[cookie大小不超过1000字节 ?100∶ (99-10×⌊页面cookie的大小/1000⌋ ) ]
- +3×(100-5×不满足cookie free要求的链接个数)
- +4×[100-(2×使用hack的filter个数+5×未使用hack的filter个数) ]
- +3×(100-5×在HTML代码中设定width和height的图片数)
- +2×[100-(favicon不可缓存或缓存时间小于3600秒 ? 5∶0)-(favicon大小超过2000字节? 5∶0)]
-
- Score = F / 89
Tags: yslow
PHP | 评论:0
| 阅读:16884
Submitted by gouki on 2010, May 7, 12:21 PM
在PHP开发中,有时候我们会不可避免的需要得到类中所有方法或者变量。也有的时候,我们需要知道某一个方法是否已经被定义,某一些类是否被加载,这时候,就需要用到一些比较少用的函数了。
1、获取类中所有的变量:get_class_vars。使用方法为get_class_vars('类名');如果在类外面调用,那么只能获取属性为public的变量,如果在内部调用,则可以获取所有的变量。当然,子类是无法获取父类的private属性的变量的。
2、获取类中所有的方法:get_class_methods,如用方法与get_class_vars几乎一样,但参数可以是类名,也可以是实例化后的类。同样,在内部可以获取所有的方法名,外部只能获取public方法。从PHP5开始,方法名返回的时候是区分大小写,而在PHP4的时候,全部返回小写(事实上方法本来对大小写无所谓的)
3、与1类似的方法:get_object_vars,它的参数只能是实例化后的object,其他的用法都与1相同
4、获取所有加载的方法,get_defined_functions,它会返回一个数组,其中以user为下标的数组就是当前被引用过的变量。当然也可以直接用function_exists来判断。
5、get_include_files,这个方法可以了解到当前页面加载了多少文件,在优化的时候可以参考,是否有文件被无意义的加载了
PHP | 评论:0
| 阅读:16417
Submitted by gouki on 2010, April 30, 10:28 PM
我这里说的历史上的今天并非网络上那种把几千年几百年的事情显示的那种历史上的今天,我说的是当某一个网站建站时间长后,数据量大的时候,可以开始考虑把前几年同一时刻发表的文章列出来。
我对于这个想法,在考虑用yii重构的时候就想过是否要加这个功能。虽然说这是画蛇添足,但在自己看自己的文章时,看到一年前两年前的文章时,你也可以了解到自己的思想到底有没有进步。去年这个时间你是在写一些垃圾,还是在写一些精华,现在呢?还是垃圾又或者已经进步了?
但,说白了,这个玩意对于其他浏览的用户来说,真的没有什么特别的意义,相反还会有反感,我为什么要看你一年前的东西,我关注是当前的内容,如果对于当前的内容有相关的资料,那还可以值得考虑一下。所以TAG相关文章就很容易被点击。
所以,历史上的今天对于增加内链是有好处的,但不是特别建议推广。我的思考是做类似于widget之类的功能放在内容页【并非一定】。
相反,我对于TAG有新的要求,一个网站,尽量不要超过200个TAG,最好都是一些有效TAG,否则一定会让人迷惑。或者说,其实你的网站也很乱,内容越杂,TAG也才会越多。当你精确于某几件事情,你的TAG应该是相对集中的。
wordpress的TAG表,设计的非常有意思。考虑过使用。crc和crt,如果真重构了,应该会用到。
Tags: history, thinking
PHP | 评论:0
| 阅读:15712
Submitted by gouki on 2010, April 30, 12:38 PM
做电子商务的不可避免的都会遇到价格区间的问题。这,主要显示在搜索的时候,如果你区间设的过大,那几乎把所有产品都列出来了。那和没有分区间没啥分别。因此,还真有一种算法可以解决这个问题(当然也只是基本解决,看上去不是特别的乱而己)。
这是在老王的博客上看到的:
means算法
Web开发中,CRUD做多了难免厌烦,其实还有很多细节可以挖掘,比如很多电子商务网站上都有商品价格区间,都是诸如1000-2000,2000-3000之类定死的,而没有按商品自己的分布规律来划分,此时有一种名为Kmeans的算法可以使用,效果很好,网上有很多现成的代码可以参阅,比如PHP的版本:
kmeanspp
K-Means Clustering in PHP
--EOF--
到百科看了一下,这么解释K-means:k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
虽然这样能够处理,老王也给了一个PHP的解决方案,但在实际中,应用的范围并能算是特别大,有时候还是直接手写的。以前的时候,我们是在分类里,直接把几个区间定义好,然后在搜索的时候指定某一分类时,自动调用这个区间。理由是,如果你的产品分的很散,从几块到几千块的都有,这种分类区间,就只能定义到分类上了。
不过上面的算法可以学习一下
Tags: kmeans, 老王, 聚合, 分类, 算法
PHP | 评论:0
| 阅读:23396