js 火狐下 中文输入 按回车触发 提交 解决
碰到一个问题,在火狐下中文输入法,按回车的时候,会触发提交事件,百度了一下:
中文支持情况
各个浏览器对中文的支持不同,中文输入法下,不同浏览器下按键触发的键盘码是不同的。但它们都不产生 keypress 事件。
- webkit 内核浏览器:每按一个键都产生 keydown、keyup;keydown 时,可打印字符的键盘码都是 229;keyup 时返回正常的键盘码值。
- firefox 浏览器:输入中文的中间过程中不产生任何键盘事件;开始输入的第一个按键产生正常的 keydown,结束的 空格或回车 产生 keyup,键盘码是正常的键盘码。
- opera 浏览器:Window 系统下与 webkit 表现一致;Mac下每次按键都只产生 keydown 事件,键盘码是正常键盘码。
- ie 浏览器:6~10几个版本触发方式与键盘码值与 webkit 内核浏览器一致。
总之,多数浏览器中文输入法(搜狗输入法)一般开始都是299,但是有些会因系统有差异。用键盘事件控制中文输入不太靠谱。
以上为网上找的资料,后来就想了一下,长话短说,废话少说,看代码,解决一:
把 keyup 事件 缓存 keypress 事件
解决二:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>火狐中文触发回车</title>
<script src="../jquery/jquery-1.8.3.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var name = "";
$("#txtName").keyup(function (event) {
if (event.keyCode == 13) {
if ($(this).val() == name) {
alert($(this).val());
}
}
});
$("#txtName").keydown(function (event) {
if (event.keyCode == 13) {
name = $(this).val();
}
});
//提交
$("#sub").click(function () {
alert($(this).val());
});
});
</script>
</head>
<body>
<input type="text" id="txtName" />
<input type="button" id="sub" value="提 交" />
</body>
</html>