RT 如何去解决这个问题。
既然你在楼上的回答里评论说有时候可能不是表单,我觉得:
加入你的提交按钮是个A,可以在keydown的时候判断一个变量,比如 isCanSubmit 。
在表单change的时候去看一下整个form是否可以提交,可以的话把这个变量赋值为true。
具体实施可能有点复杂,效率低。
为了测试你这问题我还专门下了一个搜狗输入法。。。
代码如下:
js:
$(function() {
// $(document).keyup(function(event) {
// if (event.keyCode == 13) {
// console.log($('#input').val());
// }
// });
document.onkeydown= function(event) {
if (event.keyCode == 13) {
console.log($('#input').val());
}
}
});
html:
<body>
<input id="input">
</body>
结果如下:
使用原生js和使用jquery出现这个问题的概率基本无差别。
使用keydown比使用keyup更容易触发此问题。(按下面的分析应该keyup更容易触发啊,不知道是我判断错误,还是我感觉错误)
和按键的时长有关系,快速的按下松开基本不触发此问题,长按一段时间几乎必定出现触发。
此问题只在搜狗时频繁出现,win8默认拼音输入法正常使用不会触发此问题,按键时间超长则也会触发此问题。
结论:
应该是和输入法缓冲区在输出之后返回焦点的时间不一致,搜狗返回焦点比较快,导致按键时间稍长就会,就会被已获取焦点的html响应。
解决方案:
本人技术渣,未想到合适的解决方案
简单点就增加多重事件去重复处理,如
<input type="text" id="number" style="ime-mode:disabled">
<script>
var inp = document.getElementById('number');
inp.onkeyup = inp.onblur = inp.oninput = function(event){
inp.value = inp.value.replace(/[^0-9\.]/g,'');
}
</script>
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答870 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
6 回答1k 阅读
如果是input的话,文本域另当别论。监听input keydown和keyup事件。keydown记录此时的value,keyup判断当前按下的键是否为回车键,如果是,并且value值没有改变,即提交,否则不提交。
测试截图

第一次回车不会打印submit,如果再按下回车就会打印。