手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:input

表单提交按钮input和button的取舍

这篇文章我一直在纠结,是否要摘录过来,但我还是最终决定放上来了。
其实大家都知道,在网页中,可见的按钮有三种,一种是input,一种是button,最后一种,其实也不能管是按钮,它是由img转化而来的。最最常用的还是input和button,在以前的日子里,大家都习惯于用input,因为他直接拥有type=submit,而button没有,它更适合于表达button。
然而。。。

XML/HTML代码
  1. 首先,在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

input输入框内的事件输入事件详细分析

毋庸置疑,对于input的操作,是javascript中最常用,最多见的操作。因此对于input的相关各种事件也就是大家都必须要关心的。
大家耳熟能详的大约也就是:onChange,onClick,onDbClick,onFocus,onBlur之类。onDbClick一般都难以遇到,但其实这并不全。翻开jQuery的手册,你会发现对于事件处理,有很多。大部分都是针对于input的,当然也有对于img对象的。
以下就是全文:

1.基础:本次分析原理就是在各个浏览器下input内容变化的时候触发事件的各种不兼容性.在ie下用onpropertychange事件,在其他浏览器里用input事件.

2.用例:对每个浏览器分别测试如下的情况:

–输入英文字母时–开启输入法时–大小写不同时–输入运算符时–按下tab键时–输入法中按下空格时–按下控制键时–复制粘贴时–删除文本时–等等

3.测试开始:(只标出特殊情况,没标出的表示正常触发,每次只触发一次事件)

chrome:+开启输入法时,可以捕捉到输入事 件.+开启输入法的时候按下空格键,触发两次事件,猜测一次是空格触发的,一次是输入法改变输入框里的文本时触发的.+开启输入法的时候,按下空格后,立 即按下大写锁定,此后所有的输入事件都会被触发两次,原因不知.+没有开启输入法的时候,方向键不会触发事件,但是开启输入法后,方向键可以触发事件.+ 剪切和粘贴都会触发事件.+tab键不处罚事件,开启输入法时,按tab键触发事件.+按住shift和其他键(例如:数字键),每输入一个字符触发两次 事件.

Firefox:+开启输入法时,不能扑捉到事件,但 是按下空格时,可以触发两次事件.+任何时候方向键都不触发事件.+开启输入法的时候,按下空格后,立即按下大写锁定,此后所有的输入事件都会被触发两 次,原因不知.+按下tab键的时候不触发事件.++Firefox页面刷新的时候内容会被保留在输入框里.+按住shift和其他键(例如:数字键), 每输入一个字符触发两次事件.

opera:+正常情况下,在输入框里按下tab键会 触发一次事件,但是此后只要不刷新页面,tab键都不会再触发此事件.+开启输入法后不会触发事件,开启后,方向键和tab键都不触发事件.+开启输入法 时,按下空格只触发一次事件,不会出现触发两次事件的情况.+粘贴的时候触发事件,剪切的时候不触发

ie:+输入法不会触发事件,按空格也都是只触发一次,方向键任何时刻都不触发.+刷新页面的时候内容会留在input里,而且注意,不管input是不是空的,刷新页面后自动触发一次事件.

3.总结.

就一句话,差异很大.

注意input事件可以用在chrome,Firefox,opera里,但是只能用 addEventListener绑定,不能用ontype形式,而onpropertychange可以用on形式,也可以用attachEvent绑定

--EOF--
了解这些兼容性的处理,对于页面的操作处理方面才会有更好的效果和用户体验。原文来自于http://www.beiju123.cn/blog/?p=375,是我采用read it later读回来的。。

Tags: input

Can not Input Chinese

Sorry.
Now i am using ubuntu,and i couldn't configure scim,so i can't input Chinese.

The contents of <Be good at using Mysql> maybe late.

English is very poor,please dont laugh at me.thanks

Tags: sorry, chinese, input